Skip to content

Commit

Permalink
[feature|fix] Support configuring whether to auto seed after the down…
Browse files Browse the repository at this point in the history
…load is completed; support opening the downloaded video by other apps; fix the abnormal behavior of TopBar in the download task page
  • Loading branch information
SkyD666 committed Mar 1, 2024
1 parent dbbe9b9 commit 3427560
Show file tree
Hide file tree
Showing 13 changed files with 150 additions and 2 deletions.
2 changes: 1 addition & 1 deletion app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ android {
minSdk = 24
targetSdk = 34
versionCode = 5
versionName = "1.0-beta12"
versionName = "1.0-beta13"

testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner"

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.skyd.anivu.model.preference.transmission

import android.content.Context
import androidx.datastore.preferences.core.Preferences
import androidx.datastore.preferences.core.booleanPreferencesKey
import com.skyd.anivu.base.BasePreference
import com.skyd.anivu.ext.dataStore
import com.skyd.anivu.ext.put
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

object SeedingWhenCompletePreference : BasePreference<Boolean> {
private const val SEEDING_WHEN_COMPLETE = "seedingWhenComplete"
override val default = true

val key = booleanPreferencesKey(SEEDING_WHEN_COMPLETE)

fun put(context: Context, scope: CoroutineScope, value: Boolean) {
scope.launch(Dispatchers.IO) {
context.dataStore.put(key, value)
}
}

override fun fromPreferences(preferences: Preferences): Boolean = preferences[key] ?: default
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ import com.skyd.anivu.BuildConfig
import com.skyd.anivu.R
import com.skyd.anivu.appContext
import com.skyd.anivu.config.Const
import com.skyd.anivu.ext.dataStore
import com.skyd.anivu.ext.getAppName
import com.skyd.anivu.ext.getAppVersionName
import com.skyd.anivu.ext.getOrDefault
import com.skyd.anivu.ext.ifNullOfBlank
import com.skyd.anivu.ext.saveTo
import com.skyd.anivu.ext.toDecodedUrl
Expand All @@ -33,6 +35,7 @@ import com.skyd.anivu.model.bean.download.PeerInfoBean
import com.skyd.anivu.model.db.dao.DownloadInfoDao
import com.skyd.anivu.model.db.dao.SessionParamsDao
import com.skyd.anivu.model.db.dao.TorrentFileDao
import com.skyd.anivu.model.preference.transmission.SeedingWhenCompletePreference
import com.skyd.anivu.model.repository.DownloadRepository
import com.skyd.anivu.model.service.HttpService
import com.skyd.anivu.util.uniqueInt
Expand Down Expand Up @@ -382,6 +385,14 @@ class DownloadTorrentWorker(context: Context, parameters: WorkerParameters) :
sessionStateData = sessionManager.saveState() ?: byteArrayOf(),
downloadState = DownloadInfoBean.DownloadState.Completed,
)
// Do not seeding when complete
if (!applicationContext.dataStore.getOrDefault(SeedingWhenCompletePreference)) {
pause(
context = applicationContext,
requestId = id.toString(),
link = torrentLink
)
}
}

is FileRenamedAlert -> {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,11 @@ class Media1Proxy(
true
}

R.id.action_media_item_open_with -> {
data.file.toUri(v.context).openWith(v.context)
true
}

else -> false
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,5 +41,17 @@ class SettingsFragment : BasePreferenceFragmentCompat() {
}
screen.addPreference(this)
}

Preference(this).apply {
key = "transmission"
title = getString(R.string.transmission_fragment_name)
summary = getString(R.string.transmission_fragment_description)
setIcon(R.drawable.ic_swap_vert_24)
setOnPreferenceClickListener {
findMainNavController().navigate(R.id.action_to_transmission_fragment)
true
}
screen.addPreference(this)
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.skyd.anivu.ui.fragment.settings.transmission

import android.content.Context
import android.os.Bundle
import androidx.lifecycle.lifecycleScope
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat
import com.skyd.anivu.R
import com.skyd.anivu.base.BasePreferenceFragmentCompat
import com.skyd.anivu.ext.dataStore
import com.skyd.anivu.ext.getOrDefault
import com.skyd.anivu.model.preference.transmission.SeedingWhenCompletePreference
import dagger.hilt.android.AndroidEntryPoint


@AndroidEntryPoint
class TransmissionFragment : BasePreferenceFragmentCompat() {
override val title by lazy { resources.getString(R.string.transmission_fragment_name) }
override fun Context.onAddPreferences(
savedInstanceState: Bundle?,
rootKey: String?,
screen: PreferenceScreen
) {
val transmissionBehaviorCategory = PreferenceCategory(this).apply {
key = "transmissionBehaviorCategory"
title = getString(R.string.transmission_fragment_transmission_behavior_category)
screen.addPreference(this)
}

SwitchPreferenceCompat(this).apply {
key = "seedingWhenComplete"
title = getString(R.string.transmission_fragment_seeding_when_complete)
summary = getString(R.string.transmission_fragment_seeding_when_complete_description)
setIcon(R.drawable.ic_cloud_upload_24)
isChecked = requireContext().dataStore.getOrDefault(SeedingWhenCompletePreference)
setOnPreferenceChangeListener { _, newValue ->
SeedingWhenCompletePreference.put(
context = requireContext(),
scope = lifecycleScope,
value = newValue as Boolean,
)
true
}
transmissionBehaviorCategory.addPreference(this)
}
}
}
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/ic_open_in_new_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M200,840Q167,840 143.5,816.5Q120,793 120,760L120,200Q120,167 143.5,143.5Q167,120 200,120L440,120Q457,120 468.5,131.5Q480,143 480,160Q480,177 468.5,188.5Q457,200 440,200L200,200Q200,200 200,200Q200,200 200,200L200,760Q200,760 200,760Q200,760 200,760L760,760Q760,760 760,760Q760,760 760,760L760,520Q760,503 771.5,491.5Q783,480 800,480Q817,480 828.5,491.5Q840,503 840,520L840,760Q840,793 816.5,816.5Q793,840 760,840L200,840ZM760,256L416,600Q405,611 388,611Q371,611 360,600Q349,589 349,572Q349,555 360,544L704,200L600,200Q583,200 571.5,188.5Q560,177 560,160Q560,143 571.5,131.5Q583,120 600,120L840,120L840,360Q840,377 828.5,388.5Q817,400 800,400Q783,400 771.5,388.5Q760,377 760,360L760,256Z" />
</vector>
10 changes: 10 additions & 0 deletions app/src/main/res/drawable/ic_swap_vert_24.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M360,520Q343,520 331.5,508.5Q320,497 320,480L320,233L245,308Q234,319 217.5,319Q201,319 189,308Q177,296 177,279.5Q177,263 189,251L332,108Q338,102 345,99.5Q352,97 360,97Q368,97 375,99.5Q382,102 388,108L532,252Q544,264 543.5,280Q543,296 531,308Q519,319 503,319.5Q487,320 475,308L400,233L400,480Q400,497 388.5,508.5Q377,520 360,520ZM600,863Q592,863 585,860.5Q578,858 572,852L428,708Q416,696 416.5,680Q417,664 429,652Q441,641 457,640.5Q473,640 485,652L560,727L560,480Q560,463 571.5,451.5Q583,440 600,440Q617,440 628.5,451.5Q640,463 640,480L640,727L715,652Q726,641 742.5,641Q759,641 771,652Q783,664 783,680.5Q783,697 771,709L628,852Q622,858 615,860.5Q608,863 600,863Z" />
</vector>
1 change: 0 additions & 1 deletion app/src/main/res/layout/fragment_download.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,6 @@
app:navigationContentDescription="@string/back"
app:navigationIcon="@drawable/ic_arrow_back_24"
app:subtitleCentered="true"
app:layout_scrollFlags="scroll|enterAlways"
app:title="@string/download_fragment_name"
app:titleCentered="true" />
</com.google.android.material.appbar.AppBarLayout>
Expand Down
4 changes: 4 additions & 0 deletions app/src/main/res/menu/menu_media_item.xml
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/action_media_item_open_with"
android:icon="@drawable/ic_open_in_new_24"
android:title="@string/open_with" />
<item
android:id="@+id/action_media_item_remove"
android:icon="@drawable/ic_delete_24"
Expand Down
13 changes: 13 additions & 0 deletions app/src/main/res/navigation/nav_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -162,4 +162,17 @@
app:exitAnim="@animator/nav_default_exit_anim"
app:popEnterAnim="@animator/nav_default_pop_enter_anim"
app:popExitAnim="@animator/nav_default_pop_exit_anim" />

<fragment
android:id="@+id/transmission_fragment"
android:name="com.skyd.anivu.ui.fragment.settings.transmission.TransmissionFragment"
android:label="@string/transmission_fragment_name"
tools:layout="@layout/fragment_transmission" />
<action
android:id="@+id/action_to_transmission_fragment"
app:destination="@id/transmission_fragment"
app:enterAnim="@animator/nav_default_enter_anim"
app:exitAnim="@animator/nav_default_exit_anim"
app:popEnterAnim="@animator/nav_default_pop_enter_anim"
app:popExitAnim="@animator/nav_default_pop_exit_anim" />
</navigation>
5 changes: 5 additions & 0 deletions app/src/main/res/values-zh-rCN/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -80,4 +80,9 @@
<string name="rss_config_fragment_parse_link_tag_as_enclosure">解析 Link 为附件</string>
<string name="rss_config_fragment_parse_link_tag_as_enclosure_description">解析 Link 标签,若符合磁力链或 Torrent 格式,则显示为附件</string>
<string name="rss_config_fragment_parse_category">解析</string>
<string name="transmission_fragment_name">传输</string>
<string name="transmission_fragment_description">数据传输配置、行为等</string>
<string name="transmission_fragment_transmission_behavior_category">行为</string>
<string name="transmission_fragment_seeding_when_complete">自动做种</string>
<string name="transmission_fragment_seeding_when_complete_description">下载完成后自动做种</string>
</resources>
5 changes: 5 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -85,4 +85,9 @@
<string name="rss_config_fragment_parse_link_tag_as_enclosure">Parse link as enclosure</string>
<string name="rss_config_fragment_parse_link_tag_as_enclosure_description">Parses and displays the link tag as an enclosure if it\'s a magnet or torrent link</string>
<string name="rss_config_fragment_parse_category">Parse</string>
<string name="transmission_fragment_name">Transmission</string>
<string name="transmission_fragment_description">Data transfer setup, behavior</string>
<string name="transmission_fragment_transmission_behavior_category">Behavior</string>
<string name="transmission_fragment_seeding_when_complete">Auto seeding</string>
<string name="transmission_fragment_seeding_when_complete_description">Auto seeding when download is complete</string>
</resources>

0 comments on commit 3427560

Please sign in to comment.