This commit is contained in:
Koitharu
2024-11-12 08:51:23 +02:00
parent 644f0af262
commit 609f2bd134
8 changed files with 37 additions and 11 deletions

View File

@@ -64,6 +64,9 @@ class ExternalBackupStorage @Inject constructor(
suspend fun getLastBackupDate() = listOrNull()?.maxOfOrNull { it.dateTime }
suspend fun trim(maxCount: Int): Boolean {
if (maxCount == Int.MAX_VALUE) {
return false
}
val list = listOrNull()
if (list == null || list.size <= maxCount) {
return false

View File

@@ -12,7 +12,6 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.collection.ArraySet
import androidx.core.content.edit
import androidx.core.os.LocaleListCompat
import androidx.core.util.TimeUtils
import androidx.documentfile.provider.DocumentFile
import androidx.preference.PreferenceManager
import dagger.hilt.android.qualifiers.ApplicationContext
@@ -476,7 +475,11 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
get() = TimeUnit.DAYS.toMillis(prefs.getString(KEY_BACKUP_PERIODICAL_FREQUENCY, null)?.toLongOrNull() ?: 7L)
val periodicalBackupMaxCount: Int
get() = prefs.getInt(KEY_BACKUP_PERIODICAL_COUNT, 10)
get() = if (prefs.getBoolean(KEY_BACKUP_PERIODICAL_TRIM, true)) {
prefs.getInt(KEY_BACKUP_PERIODICAL_COUNT, 10)
} else {
Int.MAX_VALUE
}
var periodicalBackupDirectory: Uri?
get() = prefs.getString(KEY_BACKUP_PERIODICAL_OUTPUT, null)?.toUriOrNull()
@@ -626,6 +629,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
const val KEY_RESTORE = "restore"
const val KEY_BACKUP_PERIODICAL_ENABLED = "backup_periodic"
const val KEY_BACKUP_PERIODICAL_FREQUENCY = "backup_periodic_freq"
const val KEY_BACKUP_PERIODICAL_TRIM = "backup_periodic_trim"
const val KEY_BACKUP_PERIODICAL_COUNT = "backup_periodic_count"
const val KEY_BACKUP_PERIODICAL_OUTPUT = "backup_periodic_output"
const val KEY_BACKUP_PERIODICAL_LAST = "backup_periodic_last"

View File

@@ -9,6 +9,7 @@ import android.widget.AdapterView
import android.widget.ArrayAdapter
import androidx.core.view.isGone
import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager
import com.google.android.material.chip.Chip
import com.google.android.material.slider.RangeSlider
@@ -356,5 +357,7 @@ class FilterSheetFragment : BaseAdaptiveSheet<SheetFilterBinding>(),
private const val TAG = "FilterSheet"
fun show(fm: FragmentManager) = FilterSheetFragment().showDistinct(fm, TAG)
fun isSupported(fragment: Fragment) = fragment.activity is FilterCoordinator.Owner
}
}

View File

@@ -62,7 +62,7 @@ class LocalListFragment : MangaListFragment(), FilterCoordinator.Owner {
override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) {
super.onViewBindingCreated(binding, savedInstanceState)
addMenuProvider(LocalListMenuProvider(binding.root.context, childFragmentManager, this::onEmptyActionClick))
addMenuProvider(LocalListMenuProvider(this, this::onEmptyActionClick))
addMenuProvider(MangaSearchMenuProvider(filterCoordinator, viewModel))
viewModel.onMangaRemoved.observeEvent(viewLifecycleOwner) { onItemRemoved() }
}

View File

@@ -1,18 +1,17 @@
package org.koitharu.kotatsu.local.ui
import android.content.Context
import android.content.Intent
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import androidx.core.view.MenuProvider
import androidx.fragment.app.FragmentManager
import androidx.fragment.app.Fragment
import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.filter.ui.sheet.FilterSheetFragment
import org.koitharu.kotatsu.settings.storage.directories.MangaDirectoriesActivity
class LocalListMenuProvider(
private val context: Context,
private val fragmentManager: FragmentManager,
private val fragment: Fragment,
private val onImportClick: Function0<Unit>,
) : MenuProvider {
@@ -20,6 +19,11 @@ class LocalListMenuProvider(
menuInflater.inflate(R.menu.opt_local, menu)
}
override fun onPrepareMenu(menu: Menu) {
super.onPrepareMenu(menu)
menu.findItem(R.id.action_filter)?.isVisible = FilterSheetFragment.isSupported(fragment)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) {
R.id.action_import -> {
@@ -28,12 +32,14 @@ class LocalListMenuProvider(
}
R.id.action_directories -> {
context.startActivity(MangaDirectoriesActivity.newIntent(context))
fragment.context?.run {
startActivity(Intent(this, MangaDirectoriesActivity::class.java))
}
true
}
R.id.action_filter -> {
FilterSheetFragment.show(fragmentManager)
FilterSheetFragment.show(fragment.childFragmentManager)
true
}

View File

@@ -763,4 +763,6 @@
<string name="breadcrumbs_separator" translatable="false"><![CDATA[" > "]]></string>
<string name="access_denied_403">Access denied (403)</string>
<string name="max_backups_count">Max number of backups</string>
<string name="delete_old_backups">Delete old backups</string>
<string name="delete_old_backups_summary">Automatically delete old backup files to save storage space</string>
</resources>

View File

@@ -24,7 +24,15 @@
android:title="@string/backup_frequency"
app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:dependency="backup_periodic"
android:key="backup_periodic_trim"
android:summary="@string/delete_old_backups_summary"
android:title="@string/delete_old_backups" />
<org.koitharu.kotatsu.settings.utils.SliderPreference
android:dependency="backup_periodic_trim"
android:key="backup_periodic_count"
android:stepSize="1"
android:title="@string/max_backups_count"

View File

@@ -5,7 +5,7 @@ adapterdelegates = "4.3.2"
appcompat = "1.7.0"
avifDecoder = "1.1.1.14d8e3c4"
biometric = "1.2.0-alpha05"
coil = "3.0.1"
coil = "3.0.2"
collections = "1.4.5"
conscrypt = "2.5.3"
constraintlayout = "2.2.0"
@@ -30,7 +30,7 @@ material = "1.12.0"
moshi = "1.15.1"
okhttp = "4.12.0"
okio = "3.9.1"
parsers = "275d7f5419"
parsers = "f3d14e101c"
preference = "1.2.1"
recyclerview = "1.3.2"
room = "2.6.1"