6.0.7 commit
This commit is contained in:
parent
0575d8f181
commit
069a156d3d
|
@ -78,6 +78,7 @@ While podcast subscriptions' OPML files (from AntennaPod or any other sources) c
|
|||
* in episode list view, if episode has no media, TTS button is shown for fetching transcript (if not exist) and then generating audio file from the transcript. TTS audio files are playable in the same way as local media (with speed setting, pause and rewind/forward)
|
||||
* Long-press filter button in FeedEpisode view enables/disables filters without changing filter settings
|
||||
* Subscriptions view has various explicit measures for sorting
|
||||
* subscriptions sorting is now bi-directional
|
||||
* in Subscriptions view, click on cover image of a feed opens the FeedInfo view (not FeedEpisodes view)
|
||||
* History view shows time of last play, and allows filters and sorts
|
||||
* 5 queues are provided by default: Default queue, and Queues 1-4
|
||||
|
|
|
@ -125,8 +125,8 @@ android {
|
|||
buildConfig true
|
||||
}
|
||||
defaultConfig {
|
||||
versionCode 3020206
|
||||
versionName "6.0.6"
|
||||
versionCode 3020207
|
||||
versionName "6.0.7"
|
||||
|
||||
applicationId "ac.mdiq.podcini.R"
|
||||
def commit = ""
|
||||
|
|
|
@ -12,7 +12,7 @@ import ac.mdiq.podcini.storage.database.Episodes.getEpisodes
|
|||
import ac.mdiq.podcini.storage.database.Queues.clearQueue
|
||||
import ac.mdiq.podcini.storage.database.Queues.getInQueueEpisodeIds
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter.Companion.unfiltered
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.activity.MainActivity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -221,7 +221,7 @@ class PlaybackTest {
|
|||
EspressoTestUtils.openNavDrawer()
|
||||
EspressoTestUtils.onDrawerItem(ViewMatchers.withText(R.string.episodes_label)).perform(ViewActions.click())
|
||||
|
||||
val episodes = getEpisodes(0, 10, unfiltered(), SortOrder.DATE_NEW_OLD)
|
||||
val episodes = getEpisodes(0, 10, unfiltered(), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val allEpisodesMatcher = Matchers.allOf(ViewMatchers.withId(R.id.recyclerView),
|
||||
ViewMatchers.isDisplayed(),
|
||||
ViewMatchers.hasMinimumChildCount(2))
|
||||
|
@ -262,7 +262,7 @@ class PlaybackTest {
|
|||
uiTestUtils!!.addLocalFeedData(true)
|
||||
runBlocking { clearQueue().join() }
|
||||
activityTestRule.launchActivity(Intent())
|
||||
val episodes = getEpisodes(0, 10, unfiltered(), SortOrder.DATE_NEW_OLD)
|
||||
val episodes = getEpisodes(0, 10, unfiltered(), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
|
||||
startLocalPlayback()
|
||||
val media = episodes[0].media
|
||||
|
|
|
@ -30,7 +30,7 @@ import ac.mdiq.podcini.storage.model.Episode
|
|||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.utils.EpisodeUtil.hasAlmostEnded
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.utils.NotificationUtils
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import ac.mdiq.podcini.util.event.*
|
||||
|
@ -210,7 +210,7 @@ open class SyncService(context: Context, params: WorkerParameters) : Worker(cont
|
|||
val queuedEpisodeActions: MutableList<EpisodeAction> = synchronizationQueueStorage.queuedEpisodeActions
|
||||
if (lastSync == 0L) {
|
||||
EventFlow.postStickyEvent(FlowEvent.SyncServiceEvent(R.string.sync_status_upload_played))
|
||||
val readItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PLAYED), SortOrder.DATE_NEW_OLD)
|
||||
val readItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PLAYED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
Logd(TAG, "First sync. Upload state for all " + readItems.size + " played episodes")
|
||||
for (item in readItems) {
|
||||
val media = item.media ?: continue
|
||||
|
|
|
@ -13,7 +13,7 @@ import ac.mdiq.podcini.storage.database.Episodes.persistEpisode
|
|||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.utils.EpisodeUtil.hasAlmostEnded
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import ac.mdiq.podcini.util.event.EventFlow
|
||||
import ac.mdiq.podcini.util.event.FlowEvent
|
||||
|
@ -244,9 +244,9 @@ import kotlin.math.min
|
|||
if (lastSync == 0L) {
|
||||
EventFlow.postStickyEvent(FlowEvent.SyncServiceEvent(R.string.sync_status_upload_played))
|
||||
// only push downloaded items
|
||||
val pausedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PAUSED), SortOrder.DATE_NEW_OLD)
|
||||
val readItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PLAYED), SortOrder.DATE_NEW_OLD)
|
||||
val favoriteItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.IS_FAVORITE), SortOrder.DATE_NEW_OLD)
|
||||
val pausedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PAUSED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val readItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PLAYED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val favoriteItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.IS_FAVORITE), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val comItems = mutableSetOf<Episode>()
|
||||
comItems.addAll(pausedItems)
|
||||
comItems.addAll(readItems)
|
||||
|
|
|
@ -2,7 +2,7 @@ package ac.mdiq.podcini.preferences
|
|||
|
||||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.ProxyConfig
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.storage.model.MediaType
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import android.content.Context
|
||||
|
@ -38,6 +38,7 @@ object UserPreferences {
|
|||
const val PREF_TINTED_COLORS: String = "prefTintedColors"
|
||||
const val PREF_HIDDEN_DRAWER_ITEMS: String = "prefHiddenDrawerItems"
|
||||
const val PREF_DRAWER_FEED_ORDER: String = "prefDrawerFeedOrder"
|
||||
const val PREF_DRAWER_FEED_ORDER_DIRECTION: String = "prefDrawerFeedOrderDir"
|
||||
const val PREF_FEED_GRID_LAYOUT: String = "prefFeedGridLayout"
|
||||
const val PREF_DRAWER_FEED_COUNTER: String = "prefDrawerFeedIndicator"
|
||||
const val PREF_EXPANDED_NOTIFICATION: String = "prefExpandNotify"
|
||||
|
@ -194,12 +195,18 @@ object UserPreferences {
|
|||
get() = appPrefs.getBoolean(PREF_OPML_BACKUP, true)
|
||||
|
||||
|
||||
val feedOrder: Int
|
||||
val feedOrderBy: Int
|
||||
get() {
|
||||
val value = appPrefs.getString(PREF_DRAWER_FEED_ORDER, "" + FEED_ORDER_UNPLAYED)
|
||||
return value!!.toInt()
|
||||
}
|
||||
|
||||
val feedOrderDir: Int
|
||||
get() {
|
||||
val value = appPrefs.getInt(PREF_DRAWER_FEED_ORDER_DIRECTION, 0)
|
||||
return value
|
||||
}
|
||||
|
||||
val useGridLayout: Boolean
|
||||
get() = appPrefs.getBoolean(PREF_FEED_GRID_LAYOUT, false)
|
||||
|
||||
|
@ -507,7 +514,7 @@ object UserPreferences {
|
|||
appPrefs.edit().putBoolean(PREF_QUEUE_KEEP_SORTED, keepSorted).apply()
|
||||
}
|
||||
|
||||
var queueKeepSortedOrder: SortOrder?
|
||||
var queueKeepSortedOrder: EpisodeSortOrder?
|
||||
/**
|
||||
* Returns the sort order for the queue keep sorted mode.
|
||||
* Note: This value is stored independently from the keep sorted state.
|
||||
|
@ -515,7 +522,7 @@ object UserPreferences {
|
|||
*/
|
||||
get() {
|
||||
val sortOrderStr = appPrefs.getString(PREF_QUEUE_KEEP_SORTED_ORDER, "use-default")
|
||||
return SortOrder.parseWithDefault(sortOrderStr, SortOrder.DATE_NEW_OLD)
|
||||
return EpisodeSortOrder.parseWithDefault(sortOrderStr, EpisodeSortOrder.DATE_NEW_OLD)
|
||||
}
|
||||
/**
|
||||
* Sets the sort order for the queue keep sorted mode.
|
||||
|
@ -527,17 +534,17 @@ object UserPreferences {
|
|||
}
|
||||
|
||||
// the sort order for the downloads.
|
||||
var downloadsSortedOrder: SortOrder?
|
||||
var downloadsSortedOrder: EpisodeSortOrder?
|
||||
get() {
|
||||
val sortOrderStr = appPrefs.getString(PREF_DOWNLOADS_SORTED_ORDER, "" + SortOrder.DATE_NEW_OLD.code)
|
||||
return SortOrder.fromCodeString(sortOrderStr)
|
||||
val sortOrderStr = appPrefs.getString(PREF_DOWNLOADS_SORTED_ORDER, "" + EpisodeSortOrder.DATE_NEW_OLD.code)
|
||||
return EpisodeSortOrder.fromCodeString(sortOrderStr)
|
||||
}
|
||||
set(sortOrder) {
|
||||
appPrefs.edit().putString(PREF_DOWNLOADS_SORTED_ORDER, "" + sortOrder!!.code).apply()
|
||||
}
|
||||
|
||||
var allEpisodesSortOrder: SortOrder?
|
||||
get() = SortOrder.fromCodeString(appPrefs.getString(PREF_SORT_ALL_EPISODES, "" + SortOrder.DATE_NEW_OLD.code))
|
||||
var allEpisodesSortOrder: EpisodeSortOrder?
|
||||
get() = EpisodeSortOrder.fromCodeString(appPrefs.getString(PREF_SORT_ALL_EPISODES, "" + EpisodeSortOrder.DATE_NEW_OLD.code))
|
||||
set(s) {
|
||||
appPrefs.edit().putString(PREF_SORT_ALL_EPISODES, "" + s!!.code).apply()
|
||||
}
|
||||
|
@ -597,10 +604,13 @@ object UserPreferences {
|
|||
return appPrefs.getBoolean(PREF_SHOW_TIME_LEFT, false)
|
||||
}
|
||||
|
||||
fun setFeedOrder(selected: String?) {
|
||||
fun setFeedOrder(selected: String, dir: Int) {
|
||||
appPrefs.edit()
|
||||
.putString(PREF_DRAWER_FEED_ORDER, selected)
|
||||
.apply()
|
||||
appPrefs.edit()
|
||||
.putInt(PREF_DRAWER_FEED_ORDER_DIRECTION, dir)
|
||||
.apply()
|
||||
}
|
||||
|
||||
fun enqueueDownloadedEpisodes(): Boolean {
|
||||
|
|
|
@ -19,7 +19,7 @@ import ac.mdiq.podcini.storage.model.Feed
|
|||
import ac.mdiq.podcini.preferences.OpmlTransporter.*
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.utils.EpisodeUtil.hasAlmostEnded
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.activity.OpmlImportActivity
|
||||
import ac.mdiq.podcini.ui.activity.PreferenceActivity
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
|
@ -732,9 +732,9 @@ class ImportExportPreferencesFragment : PreferenceFragmentCompat() {
|
|||
override fun writeDocument(feeds: List<Feed?>?, writer: Writer?, context: Context) {
|
||||
Logd(TAG, "Starting to write document")
|
||||
val queuedEpisodeActions: MutableList<EpisodeAction> = mutableListOf()
|
||||
val pausedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PAUSED), SortOrder.DATE_NEW_OLD)
|
||||
val readItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PLAYED), SortOrder.DATE_NEW_OLD)
|
||||
val favoriteItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.IS_FAVORITE), SortOrder.DATE_NEW_OLD)
|
||||
val pausedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PAUSED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val readItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.PLAYED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val favoriteItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.IS_FAVORITE), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val comItems = mutableSetOf<Episode>()
|
||||
comItems.addAll(pausedItems)
|
||||
comItems.addAll(readItems)
|
||||
|
@ -793,7 +793,7 @@ class ImportExportPreferencesFragment : PreferenceFragmentCompat() {
|
|||
val favTemplate = IOUtils.toString(favTemplateStream, UTF_8)
|
||||
val feedTemplateStream = context.assets.open(FEED_TEMPLATE)
|
||||
val feedTemplate = IOUtils.toString(feedTemplateStream, UTF_8)
|
||||
val allFavorites = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.IS_FAVORITE), SortOrder.DATE_NEW_OLD)
|
||||
val allFavorites = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.IS_FAVORITE), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val favoritesByFeed = buildFeedMap(allFavorites)
|
||||
writer!!.append(templateParts[0])
|
||||
for (feedId in favoritesByFeed.keys) {
|
||||
|
|
|
@ -6,7 +6,7 @@ import ac.mdiq.podcini.preferences.UserPreferences.fullNotificationButtons
|
|||
import ac.mdiq.podcini.preferences.UserPreferences.setShowRemainTimeSetting
|
||||
import ac.mdiq.podcini.ui.activity.PreferenceActivity
|
||||
import ac.mdiq.podcini.ui.dialog.DrawerPreferencesDialog
|
||||
import ac.mdiq.podcini.ui.dialog.FeedSortDialog
|
||||
import ac.mdiq.podcini.ui.dialog.FeedSortDialogNew
|
||||
import ac.mdiq.podcini.util.event.EventFlow
|
||||
import ac.mdiq.podcini.util.event.FlowEvent
|
||||
import android.content.Context
|
||||
|
@ -66,7 +66,8 @@ class UserInterfacePreferencesFragment : PreferenceFragmentCompat() {
|
|||
// })
|
||||
|
||||
findPreference<Preference>(UserPreferences.PREF_DRAWER_FEED_ORDER)?.onPreferenceClickListener = (Preference.OnPreferenceClickListener {
|
||||
FeedSortDialog.showDialog(requireContext())
|
||||
// FeedSortDialog.showDialog(requireContext())
|
||||
FeedSortDialogNew().show(childFragmentManager, "FeedSortDialog")
|
||||
true
|
||||
})
|
||||
findPreference<Preference>(PREF_SWIPE)?.setOnPreferenceClickListener {
|
||||
|
|
|
@ -10,7 +10,7 @@ import ac.mdiq.podcini.storage.database.Episodes.getEpisodesCount
|
|||
import ac.mdiq.podcini.storage.database.Queues.getInQueueEpisodeIds
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import android.content.Context
|
||||
import android.util.Log
|
||||
import androidx.annotation.OptIn
|
||||
|
@ -52,7 +52,7 @@ object AutoCleanups {
|
|||
private val candidates: List<Episode>
|
||||
get() {
|
||||
val candidates: MutableList<Episode> = ArrayList()
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD)
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
for (item in downloadedItems) {
|
||||
if (item.media != null && item.media!!.downloaded && !item.isFavorite) candidates.add(item)
|
||||
}
|
||||
|
@ -110,7 +110,7 @@ object AutoCleanups {
|
|||
private val candidates: List<Episode>
|
||||
get() {
|
||||
val candidates: MutableList<Episode> = ArrayList()
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD)
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val idsInQueues = getInQueueEpisodeIds()
|
||||
for (item in downloadedItems) {
|
||||
if (item.media != null && item.media!!.downloaded && !idsInQueues.contains(item.id) && !item.isFavorite)
|
||||
|
@ -187,7 +187,7 @@ object AutoCleanups {
|
|||
private val candidates: List<Episode>
|
||||
get() {
|
||||
val candidates: MutableList<Episode> = ArrayList()
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD)
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
val idsInQueues = getInQueueEpisodeIds()
|
||||
val mostRecentDateForDeletion = calcMostRecentDateForDeletion(Date())
|
||||
for (item in downloadedItems) {
|
||||
|
|
|
@ -12,7 +12,7 @@ import ac.mdiq.podcini.storage.database.Episodes.getEpisodes
|
|||
import ac.mdiq.podcini.storage.database.Episodes.getEpisodesCount
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -80,7 +80,7 @@ object AutoDownloads {
|
|||
Logd(TAG, "Performing auto-dl of undownloaded episodes")
|
||||
val candidates: MutableList<Episode>
|
||||
val queue = curQueue.episodes
|
||||
val newItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.NEW), SortOrder.DATE_NEW_OLD)
|
||||
val newItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.NEW), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
Logd(TAG, "newItems: ${newItems.size}")
|
||||
candidates = ArrayList(queue.size + newItems.size)
|
||||
candidates.addAll(queue)
|
||||
|
|
|
@ -20,7 +20,7 @@ import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
|
|||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeMedia
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.util.IntentUtils.sendLocalBroadcast
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import ac.mdiq.podcini.util.event.EventFlow
|
||||
|
@ -48,7 +48,7 @@ object Episodes {
|
|||
* @param filter The filter describing which episodes to filter out.
|
||||
* TODO: filters of queued and notqueued don't work in this
|
||||
*/
|
||||
fun getEpisodes(offset: Int, limit: Int, filter: EpisodeFilter?, sortOrder: SortOrder?, copy: Boolean = true): List<Episode> {
|
||||
fun getEpisodes(offset: Int, limit: Int, filter: EpisodeFilter?, sortOrder: EpisodeSortOrder?, copy: Boolean = true): List<Episode> {
|
||||
Logd(TAG, "getEpisodes called with: offset=$offset, limit=$limit")
|
||||
val queryString = filter?.queryString()?:"id > 0"
|
||||
var episodes = realm.query(Episode::class).query(queryString).find().toMutableList()
|
||||
|
|
|
@ -72,7 +72,7 @@ object Feeds {
|
|||
for (feed in feedsCopy) {
|
||||
if (feed.preferences != null) tagsSet.addAll(feed.preferences!!.tags.filter { it != TAG_ROOT })
|
||||
}
|
||||
val newTags = tagsSet.intersect(tags.toSet())
|
||||
val newTags = tagsSet - tags.toSet()
|
||||
if (newTags.isNotEmpty()) {
|
||||
tags.clear()
|
||||
tags.addAll(tagsSet)
|
||||
|
|
|
@ -17,7 +17,7 @@ import ac.mdiq.podcini.storage.model.Episode
|
|||
import ac.mdiq.podcini.storage.model.EpisodeMedia
|
||||
import ac.mdiq.podcini.storage.model.PlayQueue
|
||||
import ac.mdiq.podcini.storage.model.Playable
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import ac.mdiq.podcini.util.event.EventFlow
|
||||
import ac.mdiq.podcini.util.event.FlowEvent
|
||||
|
@ -126,7 +126,7 @@ object Queues {
|
|||
// Sort queue by configured sort order
|
||||
val sortOrder = queueKeepSortedOrder
|
||||
// do not shuffle the list on every change
|
||||
if (sortOrder == SortOrder.RANDOM) return
|
||||
if (sortOrder == EpisodeSortOrder.RANDOM) return
|
||||
|
||||
if (sortOrder != null) {
|
||||
val permutor = getPermutor(sortOrder)
|
||||
|
|
|
@ -3,7 +3,7 @@ package ac.mdiq.podcini.storage.model
|
|||
/**
|
||||
* Provides sort orders to sort a list of episodes.
|
||||
*/
|
||||
enum class SortOrder(@JvmField val code: Int, @JvmField val scope: Scope) {
|
||||
enum class EpisodeSortOrder(@JvmField val code: Int, @JvmField val scope: Scope) {
|
||||
DATE_OLD_NEW(1, Scope.INTRA_FEED),
|
||||
DATE_NEW_OLD(2, Scope.INTRA_FEED),
|
||||
EPISODE_TITLE_A_Z(3, Scope.INTRA_FEED),
|
||||
|
@ -35,7 +35,7 @@ enum class SortOrder(@JvmField val code: Int, @JvmField val scope: Scope) {
|
|||
* Converts the string representation to its enum value. If the string value is unknown,
|
||||
* the given default value is returned.
|
||||
*/
|
||||
fun parseWithDefault(value: String?, defaultValue: SortOrder): SortOrder {
|
||||
fun parseWithDefault(value: String?, defaultValue: EpisodeSortOrder): EpisodeSortOrder {
|
||||
return try {
|
||||
valueOf(value!!)
|
||||
} catch (e: IllegalArgumentException) {
|
||||
|
@ -44,7 +44,7 @@ enum class SortOrder(@JvmField val code: Int, @JvmField val scope: Scope) {
|
|||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromCodeString(codeStr: String?): SortOrder? {
|
||||
fun fromCodeString(codeStr: String?): EpisodeSortOrder? {
|
||||
if (codeStr.isNullOrEmpty()) return null
|
||||
|
||||
val code = codeStr.toInt()
|
||||
|
@ -55,17 +55,17 @@ enum class SortOrder(@JvmField val code: Int, @JvmField val scope: Scope) {
|
|||
}
|
||||
|
||||
@JvmStatic
|
||||
fun fromCode(code: Int): SortOrder? {
|
||||
return enumValues<SortOrder>().firstOrNull { it.code == code }
|
||||
fun fromCode(code: Int): EpisodeSortOrder? {
|
||||
return enumValues<EpisodeSortOrder>().firstOrNull { it.code == code }
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
fun toCodeString(sortOrder: SortOrder?): String? {
|
||||
fun toCodeString(sortOrder: EpisodeSortOrder?): String? {
|
||||
return sortOrder?.code?.toString()
|
||||
}
|
||||
|
||||
fun valuesOf(stringValues: Array<String?>): Array<SortOrder?> {
|
||||
val values = arrayOfNulls<SortOrder>(stringValues.size)
|
||||
fun valuesOf(stringValues: Array<String?>): Array<EpisodeSortOrder?> {
|
||||
val values = arrayOfNulls<EpisodeSortOrder>(stringValues.size)
|
||||
for (i in stringValues.indices) {
|
||||
values[i] = valueOf(stringValues[i]!!)
|
||||
}
|
|
@ -1,7 +1,7 @@
|
|||
package ac.mdiq.podcini.storage.model
|
||||
|
||||
import ac.mdiq.podcini.storage.model.FeedFunding.Companion.extractPaymentLinks
|
||||
import ac.mdiq.podcini.storage.model.SortOrder.Companion.fromCode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder.Companion.fromCode
|
||||
import io.realm.kotlin.ext.realmListOf
|
||||
import io.realm.kotlin.types.RealmList
|
||||
import io.realm.kotlin.types.RealmObject
|
||||
|
@ -122,7 +122,7 @@ class Feed : RealmObject {
|
|||
get() = EpisodeFilter(preferences?.filterString ?: "")
|
||||
|
||||
@Ignore
|
||||
var sortOrder: SortOrder? = null
|
||||
var sortOrder: EpisodeSortOrder? = null
|
||||
get() = fromCode(preferences?.sortOrderCode ?: 0)
|
||||
set(value) {
|
||||
if (value == null) return
|
||||
|
|
|
@ -0,0 +1,26 @@
|
|||
package ac.mdiq.podcini.storage.model
|
||||
|
||||
enum class FeedSortOrder(val code: Int, val index: Int) {
|
||||
UNPLAYED_NEW_OLD(1, 0),
|
||||
UNPLAYED_OLD_NEW(2, 0),
|
||||
ALPHABETIC_A_Z(3, 1),
|
||||
ALPHABETIC_Z_A(4,1 ),
|
||||
LAST_UPDATED_NEW_OLD(5, 2),
|
||||
LAST_UPDATED_OLD_NEW(6, 2),
|
||||
LAST_UPDATED_UNPLAYED_NEW_OLD(7, 3),
|
||||
LAST_UPDATED_UNPLAYED_OLD_NEW(8, 3),
|
||||
MOST_PLAYED(9, 4),
|
||||
LEAST_PLAYED(10, 4),
|
||||
MOST_DOWNLOADED(11, 5),
|
||||
LEAST_DOWNLAODED(12, 5),
|
||||
MOST_DOWNLOADED_UNPLAYED(13, 6),
|
||||
LEAST_DOWNLAODED_UNPLAYED(14, 6),
|
||||
NEW_EPISODES_MOST(15, 7),
|
||||
NEW_EPISODES_LEAST(16, 7);
|
||||
|
||||
companion object {
|
||||
fun getSortOrder(dir: Int, index: Int): FeedSortOrder? {
|
||||
return enumValues<FeedSortOrder>().firstOrNull { it.code == 2*index+dir+1 && it.index == index }
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,6 +19,7 @@ import ac.mdiq.podcini.preferences.UserPreferences.defaultPage
|
|||
import ac.mdiq.podcini.preferences.UserPreferences.hiddenDrawerItems
|
||||
import ac.mdiq.podcini.receiver.MediaButtonReceiver.Companion.createIntent
|
||||
import ac.mdiq.podcini.receiver.PlayerWidget
|
||||
import ac.mdiq.podcini.storage.database.Feeds.buildTags
|
||||
import ac.mdiq.podcini.storage.database.Feeds.monitorFeeds
|
||||
import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
|
||||
import ac.mdiq.podcini.ui.actions.swipeactions.SwipeActions
|
||||
|
@ -130,6 +131,7 @@ class MainActivity : CastEnabledActivity() {
|
|||
SwipeActions.getSharedPrefs(this@MainActivity)
|
||||
QueueFragment.getSharedPrefs(this@MainActivity)
|
||||
// updateFeedMap()
|
||||
buildTags()
|
||||
monitorFeeds()
|
||||
// InTheatre.apply { }
|
||||
PlayerDetailsFragment.getSharedPrefs(this@MainActivity)
|
||||
|
@ -403,7 +405,7 @@ class MainActivity : CastEnabledActivity() {
|
|||
val playerView = findViewById<FragmentContainerView>(R.id.playerFragment1)
|
||||
val playerParams = playerView?.layoutParams as? MarginLayoutParams
|
||||
playerParams?.setMargins(navigationBarInsets.left, 0, navigationBarInsets.right, 0)
|
||||
playerView.layoutParams = playerParams
|
||||
playerView?.layoutParams = playerParams
|
||||
audioPlayerView.visibility = if (visible) View.VISIBLE else View.GONE
|
||||
}
|
||||
|
||||
|
|
|
@ -4,7 +4,7 @@ import ac.mdiq.podcini.R
|
|||
import ac.mdiq.podcini.databinding.SortDialogBinding
|
||||
import ac.mdiq.podcini.databinding.SortDialogItemActiveBinding
|
||||
import ac.mdiq.podcini.databinding.SortDialogItemBinding
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
|
@ -22,7 +22,7 @@ open class EpisodeSortDialog : BottomSheetDialogFragment() {
|
|||
protected var _binding: SortDialogBinding? = null
|
||||
protected val binding get() = _binding!!
|
||||
|
||||
protected var sortOrder: SortOrder? = null
|
||||
protected var sortOrder: EpisodeSortOrder? = null
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
_binding = SortDialogBinding.inflate(inflater)
|
||||
|
@ -38,22 +38,22 @@ open class EpisodeSortDialog : BottomSheetDialogFragment() {
|
|||
|
||||
private fun populateList() {
|
||||
binding.gridLayout.removeAllViews()
|
||||
onAddItem(R.string.episode_title, SortOrder.EPISODE_TITLE_A_Z, SortOrder.EPISODE_TITLE_Z_A, true)
|
||||
onAddItem(R.string.feed_title, SortOrder.FEED_TITLE_A_Z, SortOrder.FEED_TITLE_Z_A, true)
|
||||
onAddItem(R.string.duration, SortOrder.DURATION_SHORT_LONG, SortOrder.DURATION_LONG_SHORT, true)
|
||||
onAddItem(R.string.publish_date, SortOrder.DATE_OLD_NEW, SortOrder.DATE_NEW_OLD, false)
|
||||
onAddItem(R.string.last_played_date, SortOrder.PLAYED_DATE_OLD_NEW, SortOrder.PLAYED_DATE_NEW_OLD, false)
|
||||
onAddItem(R.string.completed_date, SortOrder.COMPLETED_DATE_OLD_NEW, SortOrder.COMPLETED_DATE_NEW_OLD, false)
|
||||
onAddItem(R.string.size, SortOrder.SIZE_SMALL_LARGE, SortOrder.SIZE_LARGE_SMALL, false)
|
||||
onAddItem(R.string.filename, SortOrder.EPISODE_FILENAME_A_Z, SortOrder.EPISODE_FILENAME_Z_A, true)
|
||||
onAddItem(R.string.random, SortOrder.RANDOM, SortOrder.RANDOM, true)
|
||||
onAddItem(R.string.smart_shuffle, SortOrder.SMART_SHUFFLE_OLD_NEW, SortOrder.SMART_SHUFFLE_NEW_OLD, false)
|
||||
onAddItem(R.string.episode_title, EpisodeSortOrder.EPISODE_TITLE_A_Z, EpisodeSortOrder.EPISODE_TITLE_Z_A, true)
|
||||
onAddItem(R.string.feed_title, EpisodeSortOrder.FEED_TITLE_A_Z, EpisodeSortOrder.FEED_TITLE_Z_A, true)
|
||||
onAddItem(R.string.duration, EpisodeSortOrder.DURATION_SHORT_LONG, EpisodeSortOrder.DURATION_LONG_SHORT, true)
|
||||
onAddItem(R.string.publish_date, EpisodeSortOrder.DATE_OLD_NEW, EpisodeSortOrder.DATE_NEW_OLD, false)
|
||||
onAddItem(R.string.last_played_date, EpisodeSortOrder.PLAYED_DATE_OLD_NEW, EpisodeSortOrder.PLAYED_DATE_NEW_OLD, false)
|
||||
onAddItem(R.string.completed_date, EpisodeSortOrder.COMPLETED_DATE_OLD_NEW, EpisodeSortOrder.COMPLETED_DATE_NEW_OLD, false)
|
||||
onAddItem(R.string.size, EpisodeSortOrder.SIZE_SMALL_LARGE, EpisodeSortOrder.SIZE_LARGE_SMALL, false)
|
||||
onAddItem(R.string.filename, EpisodeSortOrder.EPISODE_FILENAME_A_Z, EpisodeSortOrder.EPISODE_FILENAME_Z_A, true)
|
||||
onAddItem(R.string.random, EpisodeSortOrder.RANDOM, EpisodeSortOrder.RANDOM, true)
|
||||
onAddItem(R.string.smart_shuffle, EpisodeSortOrder.SMART_SHUFFLE_OLD_NEW, EpisodeSortOrder.SMART_SHUFFLE_NEW_OLD, false)
|
||||
}
|
||||
|
||||
protected open fun onAddItem(title: Int, ascending: SortOrder, descending: SortOrder, ascendingIsDefault: Boolean) {
|
||||
protected open fun onAddItem(title: Int, ascending: EpisodeSortOrder, descending: EpisodeSortOrder, ascendingIsDefault: Boolean) {
|
||||
if (sortOrder == ascending || sortOrder == descending) {
|
||||
val item = SortDialogItemActiveBinding.inflate(layoutInflater, binding.gridLayout, false)
|
||||
val other: SortOrder
|
||||
val other: EpisodeSortOrder
|
||||
when {
|
||||
ascending == descending -> {
|
||||
item.button.setText(title)
|
||||
|
|
|
@ -1,33 +0,0 @@
|
|||
package ac.mdiq.podcini.ui.dialog
|
||||
|
||||
import ac.mdiq.podcini.R
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.feedOrder
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.setFeedOrder
|
||||
import ac.mdiq.podcini.util.event.EventFlow
|
||||
import ac.mdiq.podcini.util.event.FlowEvent
|
||||
import android.content.Context
|
||||
import android.content.DialogInterface
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
|
||||
object FeedSortDialog {
|
||||
fun showDialog(context: Context) {
|
||||
val dialog = MaterialAlertDialogBuilder(context)
|
||||
dialog.setTitle(context.getString(R.string.pref_nav_drawer_feed_order_title))
|
||||
dialog.setNegativeButton(android.R.string.cancel) { d: DialogInterface, _: Int -> d.dismiss() }
|
||||
|
||||
val selected = feedOrder
|
||||
val entryValues = listOf(*context.resources.getStringArray(R.array.nav_drawer_feed_order_values))
|
||||
val selectedIndex = entryValues.indexOf("" + selected)
|
||||
|
||||
val items = context.resources.getStringArray(R.array.nav_drawer_feed_order_options)
|
||||
dialog.setSingleChoiceItems(items, selectedIndex) { d: DialogInterface, which: Int ->
|
||||
if (selectedIndex != which) {
|
||||
setFeedOrder(entryValues[which])
|
||||
//Update subscriptions
|
||||
EventFlow.postEvent(FlowEvent.FeedsSortedEvent())
|
||||
}
|
||||
d.dismiss()
|
||||
}
|
||||
dialog.show()
|
||||
}
|
||||
}
|
|
@ -0,0 +1,133 @@
|
|||
package ac.mdiq.podcini.ui.dialog
|
||||
|
||||
import ac.mdiq.podcini.R
|
||||
import ac.mdiq.podcini.databinding.SortDialogBinding
|
||||
import ac.mdiq.podcini.databinding.SortDialogItemActiveBinding
|
||||
import ac.mdiq.podcini.databinding.SortDialogItemBinding
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.feedOrderBy
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.feedOrderDir
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.setFeedOrder
|
||||
import ac.mdiq.podcini.storage.model.FeedSortOrder
|
||||
import ac.mdiq.podcini.storage.model.FeedSortOrder.Companion.getSortOrder
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import ac.mdiq.podcini.util.event.EventFlow
|
||||
import ac.mdiq.podcini.util.event.FlowEvent
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import android.widget.CompoundButton
|
||||
import android.widget.FrameLayout
|
||||
import com.google.android.material.bottomsheet.BottomSheetBehavior
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialog
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
|
||||
open class FeedSortDialogNew : BottomSheetDialogFragment() {
|
||||
private val TAG: String = FeedSortDialogNew::class.simpleName ?: "Anonymous"
|
||||
|
||||
protected var _binding: SortDialogBinding? = null
|
||||
protected val binding get() = _binding!!
|
||||
|
||||
protected var sortOrder: FeedSortOrder? = null
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
sortOrder = getSortOrder(feedOrderDir, feedOrderBy)
|
||||
}
|
||||
|
||||
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||
_binding = SortDialogBinding.inflate(inflater)
|
||||
populateList()
|
||||
binding.keepSortedCheckbox.setOnCheckedChangeListener { _: CompoundButton?, _: Boolean -> this@FeedSortDialogNew.onSelectionChanged() }
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onStart() {
|
||||
super.onStart()
|
||||
dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
|
||||
}
|
||||
|
||||
private fun populateList() {
|
||||
binding.gridLayout.removeAllViews()
|
||||
onAddItem(R.string.feed_order_unplayed_count, FeedSortOrder.UNPLAYED_OLD_NEW, FeedSortOrder.UNPLAYED_NEW_OLD, false)
|
||||
onAddItem(R.string.feed_order_alphabetical, FeedSortOrder.ALPHABETIC_A_Z, FeedSortOrder.ALPHABETIC_Z_A, true)
|
||||
onAddItem(R.string.feed_order_last_update, FeedSortOrder.LAST_UPDATED_OLD_NEW, FeedSortOrder.LAST_UPDATED_NEW_OLD, false)
|
||||
onAddItem(R.string.feed_order_last_unread_update, FeedSortOrder.LAST_UPDATED_UNPLAYED_OLD_NEW, FeedSortOrder.LAST_UPDATED_UNPLAYED_NEW_OLD, false)
|
||||
onAddItem(R.string.feed_order_most_played, FeedSortOrder.LEAST_PLAYED, FeedSortOrder.MOST_PLAYED, false)
|
||||
onAddItem(R.string.feed_counter_downloaded, FeedSortOrder.LEAST_DOWNLAODED, FeedSortOrder.MOST_DOWNLOADED, false)
|
||||
onAddItem(R.string.feed_counter_downloaded_unplayed, FeedSortOrder.LEAST_DOWNLAODED_UNPLAYED, FeedSortOrder.MOST_DOWNLOADED_UNPLAYED, false)
|
||||
onAddItem(R.string.feed_order_new_episodes, FeedSortOrder.NEW_EPISODES_LEAST, FeedSortOrder.NEW_EPISODES_MOST, false)
|
||||
}
|
||||
|
||||
protected open fun onAddItem(title: Int, ascending: FeedSortOrder, descending: FeedSortOrder, ascendingIsDefault: Boolean) {
|
||||
Logd(TAG, "onAddItem $title")
|
||||
if (sortOrder == ascending || sortOrder == descending) {
|
||||
val item = SortDialogItemActiveBinding.inflate(layoutInflater, binding.gridLayout, false)
|
||||
val other: FeedSortOrder
|
||||
when {
|
||||
ascending == descending -> {
|
||||
item.button.setText(title)
|
||||
other = ascending
|
||||
}
|
||||
sortOrder == ascending -> {
|
||||
item.button.text = getString(title) + "\u00A0▲"
|
||||
other = descending
|
||||
}
|
||||
else -> {
|
||||
item.button.text = getString(title) + "\u00A0▼"
|
||||
other = ascending
|
||||
}
|
||||
}
|
||||
item.button.setOnClickListener {
|
||||
Logd(TAG, "button clicked: $title ${other.name} ${other.code}")
|
||||
sortOrder = other
|
||||
populateList()
|
||||
setFeedOrder(sortOrder!!.index.toString(), if (sortOrder == ascending) 0 else 1)
|
||||
onSelectionChanged()
|
||||
EventFlow.postEvent(FlowEvent.FeedsSortedEvent())
|
||||
}
|
||||
binding.gridLayout.addView(item.root)
|
||||
} else {
|
||||
val item = SortDialogItemBinding.inflate(layoutInflater, binding.gridLayout, false)
|
||||
item.button.setText(title)
|
||||
item.button.setOnClickListener {
|
||||
sortOrder = if (ascendingIsDefault) ascending else descending
|
||||
Logd(TAG, "button clicked 1: ${getString(title)} ${sortOrder!!.name} ${sortOrder!!.code}")
|
||||
populateList()
|
||||
setFeedOrder(sortOrder!!.index.toString(), if (sortOrder == ascending) 0 else 1)
|
||||
onSelectionChanged()
|
||||
EventFlow.postEvent(FlowEvent.FeedsSortedEvent())
|
||||
}
|
||||
binding.gridLayout.addView(item.root)
|
||||
}
|
||||
}
|
||||
|
||||
protected open fun onSelectionChanged() {}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
val dialog = super.onCreateDialog(savedInstanceState)
|
||||
dialog.setOnShowListener { dialogInterface: DialogInterface ->
|
||||
val bottomSheetDialog = dialogInterface as BottomSheetDialog
|
||||
setupFullHeight(bottomSheetDialog)
|
||||
}
|
||||
return dialog
|
||||
}
|
||||
|
||||
override fun onDestroyView() {
|
||||
super.onDestroyView()
|
||||
_binding = null
|
||||
}
|
||||
|
||||
private fun setupFullHeight(bottomSheetDialog: BottomSheetDialog) {
|
||||
val bottomSheet = bottomSheetDialog.findViewById<FrameLayout>(com.leinardi.android.speeddial.R.id.design_bottom_sheet)
|
||||
if (bottomSheet != null) {
|
||||
val behavior = BottomSheetBehavior.from(bottomSheet)
|
||||
val layoutParams = bottomSheet.layoutParams
|
||||
bottomSheet.layoutParams = layoutParams
|
||||
behavior.state = BottomSheetBehavior.STATE_EXPANDED
|
||||
}
|
||||
}
|
||||
}
|
|
@ -6,10 +6,13 @@ import ac.mdiq.podcini.storage.database.Feeds.buildTags
|
|||
import ac.mdiq.podcini.storage.database.Feeds.getTags
|
||||
import ac.mdiq.podcini.storage.database.Feeds.persistFeedPreferences
|
||||
import ac.mdiq.podcini.storage.database.RealmDB.unmanaged
|
||||
import ac.mdiq.podcini.storage.database.RealmDB.upsert
|
||||
import ac.mdiq.podcini.storage.database.RealmDB.upsertBlk
|
||||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.FeedPreferences
|
||||
import ac.mdiq.podcini.ui.adapter.SimpleChipAdapter
|
||||
import ac.mdiq.podcini.ui.utils.ItemOffsetDecoration
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import android.app.Dialog
|
||||
import android.content.DialogInterface
|
||||
import android.os.Bundle
|
||||
|
@ -53,7 +56,6 @@ class TagSettingsDialog : DialogFragment() {
|
|||
}
|
||||
}
|
||||
binding.tagsRecycler.adapter = adapter
|
||||
// binding.rootFolderCheckbox.isChecked = commonTags.contains(FeedPreferences.TAG_ROOT)
|
||||
|
||||
binding.newTagTextInput.setEndIconOnClickListener {
|
||||
addTag(binding.newTagEditText.text.toString().trim { it <= ' ' })
|
||||
|
@ -76,14 +78,12 @@ class TagSettingsDialog : DialogFragment() {
|
|||
addTag(binding.newTagEditText.text.toString().trim { it <= ' ' })
|
||||
updatePreferencesTags(commonTags)
|
||||
buildTags()
|
||||
// EventFlow.postEvent(FlowEvent.FeedTagsChangedEvent())
|
||||
}
|
||||
dialog.setNegativeButton(R.string.cancel_label, null)
|
||||
return dialog.create()
|
||||
}
|
||||
|
||||
private fun loadTags() {
|
||||
// val scope = CoroutineScope(Dispatchers.Main)
|
||||
val acAdapter = ArrayAdapter(requireContext(), R.layout.single_tag_text_view, getTags())
|
||||
binding.newTagEditText.setAdapter(acAdapter)
|
||||
}
|
||||
|
@ -102,16 +102,13 @@ class TagSettingsDialog : DialogFragment() {
|
|||
}
|
||||
|
||||
@OptIn(UnstableApi::class) private fun updatePreferencesTags(commonTags: Set<String>) {
|
||||
// if (binding.rootFolderCheckbox.isChecked) {
|
||||
// displayedTags.add(FeedPreferences.TAG_ROOT)
|
||||
// }
|
||||
for (feed_ in feedList) {
|
||||
val feed = unmanaged(feed_)
|
||||
if (feed.preferences != null) {
|
||||
feed.preferences!!.tags.removeAll(commonTags)
|
||||
feed.preferences!!.tags.addAll(displayedTags)
|
||||
persistFeedPreferences(feed)
|
||||
// EventFlow.postEvent(FlowEvent.FeedPrefsChangeEvent(feed))
|
||||
for (f in feedList) {
|
||||
Logd(TAG, "${f.title} $displayedTags")
|
||||
upsertBlk(f) {
|
||||
if (it.preferences != null) {
|
||||
it.preferences!!.tags.removeAll(commonTags)
|
||||
it.preferences!!.tags.addAll(displayedTags)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ import ac.mdiq.podcini.net.feed.discovery.*
|
|||
import ac.mdiq.podcini.net.feed.FeedUpdateManager
|
||||
import ac.mdiq.podcini.storage.database.Feeds.updateFeed
|
||||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.activity.MainActivity
|
||||
import ac.mdiq.podcini.ui.activity.OpmlImportActivity
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
|
@ -193,7 +193,7 @@ class AddFeedFragment : Fragment() {
|
|||
|
||||
val dirFeed = Feed(Feed.PREFIX_LOCAL_FOLDER + uri.toString(), null, title)
|
||||
dirFeed.episodes.clear()
|
||||
dirFeed.sortOrder = SortOrder.EPISODE_TITLE_A_Z
|
||||
dirFeed.sortOrder = EpisodeSortOrder.EPISODE_TITLE_A_Z
|
||||
val fromDatabase: Feed? = updateFeed(requireContext(), dirFeed, false)
|
||||
FeedUpdateManager.runOnce(requireContext(), fromDatabase)
|
||||
return fromDatabase
|
||||
|
|
|
@ -7,7 +7,7 @@ import ac.mdiq.podcini.storage.database.Episodes.getEpisodes
|
|||
import ac.mdiq.podcini.storage.database.Episodes.getEpisodesCount
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.activity.MainActivity
|
||||
import ac.mdiq.podcini.ui.dialog.EpisodeFilterDialog
|
||||
import ac.mdiq.podcini.ui.dialog.EpisodeSortDialog
|
||||
|
@ -146,9 +146,9 @@ import kotlin.math.min
|
|||
super.onCreate(savedInstanceState)
|
||||
sortOrder = allEpisodesSortOrder
|
||||
}
|
||||
override fun onAddItem(title: Int, ascending: SortOrder, descending: SortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == SortOrder.DATE_OLD_NEW || ascending == SortOrder.DURATION_SHORT_LONG
|
||||
|| ascending == SortOrder.PLAYED_DATE_OLD_NEW || ascending == SortOrder.COMPLETED_DATE_OLD_NEW)
|
||||
override fun onAddItem(title: Int, ascending: EpisodeSortOrder, descending: EpisodeSortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == EpisodeSortOrder.DATE_OLD_NEW || ascending == EpisodeSortOrder.DURATION_SHORT_LONG
|
||||
|| ascending == EpisodeSortOrder.PLAYED_DATE_OLD_NEW || ascending == EpisodeSortOrder.COMPLETED_DATE_OLD_NEW)
|
||||
super.onAddItem(title, ascending, descending, ascendingIsDefault)
|
||||
}
|
||||
override fun onSelectionChanged() {
|
||||
|
|
|
@ -13,7 +13,7 @@ import ac.mdiq.podcini.storage.model.Episode
|
|||
import ac.mdiq.podcini.storage.model.EpisodeMedia
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.utils.EpisodeUtil
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.actions.EpisodeMultiSelectHandler
|
||||
import ac.mdiq.podcini.ui.actions.actionbutton.DeleteActionButton
|
||||
import ac.mdiq.podcini.ui.actions.menuhandler.EpisodeMenuHandler
|
||||
|
@ -323,7 +323,7 @@ import java.util.*
|
|||
lifecycleScope.launch {
|
||||
try {
|
||||
withContext(Dispatchers.IO) {
|
||||
val sortOrder: SortOrder? = UserPreferences.downloadsSortedOrder
|
||||
val sortOrder: EpisodeSortOrder? = UserPreferences.downloadsSortedOrder
|
||||
val downloadedItems = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), sortOrder)
|
||||
if (runningDownloads.isEmpty()) episodes = downloadedItems.toMutableList()
|
||||
else {
|
||||
|
@ -411,11 +411,11 @@ import java.util.*
|
|||
sortOrder = UserPreferences.downloadsSortedOrder
|
||||
}
|
||||
|
||||
override fun onAddItem(title: Int, ascending: SortOrder, descending: SortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == SortOrder.DATE_OLD_NEW || ascending == SortOrder.PLAYED_DATE_OLD_NEW
|
||||
|| ascending == SortOrder.COMPLETED_DATE_OLD_NEW
|
||||
|| ascending == SortOrder.DURATION_SHORT_LONG || ascending == SortOrder.EPISODE_TITLE_A_Z
|
||||
|| ascending == SortOrder.SIZE_SMALL_LARGE || ascending == SortOrder.FEED_TITLE_A_Z) {
|
||||
override fun onAddItem(title: Int, ascending: EpisodeSortOrder, descending: EpisodeSortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == EpisodeSortOrder.DATE_OLD_NEW || ascending == EpisodeSortOrder.PLAYED_DATE_OLD_NEW
|
||||
|| ascending == EpisodeSortOrder.COMPLETED_DATE_OLD_NEW
|
||||
|| ascending == EpisodeSortOrder.DURATION_SHORT_LONG || ascending == EpisodeSortOrder.EPISODE_TITLE_A_Z
|
||||
|| ascending == EpisodeSortOrder.SIZE_SMALL_LARGE || ascending == EpisodeSortOrder.FEED_TITLE_A_Z) {
|
||||
super.onAddItem(title, ascending, descending, ascendingIsDefault)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -20,8 +20,8 @@ import ac.mdiq.podcini.storage.model.EpisodeMedia
|
|||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.utils.EpisodeUtil
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.SortOrder.Companion.fromCode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder.Companion.fromCode
|
||||
import ac.mdiq.podcini.ui.actions.EpisodeMultiSelectHandler
|
||||
import ac.mdiq.podcini.ui.actions.menuhandler.EpisodeMenuHandler
|
||||
import ac.mdiq.podcini.ui.actions.menuhandler.MenuItemUtils
|
||||
|
@ -698,13 +698,13 @@ import java.util.concurrent.Semaphore
|
|||
class SingleFeedSortDialog(val feed: Feed?) : EpisodeSortDialog() {
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
sortOrder = feed?.sortOrder ?: SortOrder.DATE_NEW_OLD
|
||||
sortOrder = feed?.sortOrder ?: EpisodeSortOrder.DATE_NEW_OLD
|
||||
}
|
||||
override fun onAddItem(title: Int, ascending: SortOrder, descending: SortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == SortOrder.DATE_OLD_NEW || ascending == SortOrder.PLAYED_DATE_OLD_NEW || ascending == SortOrder.COMPLETED_DATE_OLD_NEW
|
||||
|| ascending == SortOrder.DURATION_SHORT_LONG || ascending == SortOrder.RANDOM
|
||||
|| ascending == SortOrder.EPISODE_TITLE_A_Z
|
||||
|| (feed?.isLocalFeed == true && ascending == SortOrder.EPISODE_FILENAME_A_Z)) {
|
||||
override fun onAddItem(title: Int, ascending: EpisodeSortOrder, descending: EpisodeSortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == EpisodeSortOrder.DATE_OLD_NEW || ascending == EpisodeSortOrder.PLAYED_DATE_OLD_NEW || ascending == EpisodeSortOrder.COMPLETED_DATE_OLD_NEW
|
||||
|| ascending == EpisodeSortOrder.DURATION_SHORT_LONG || ascending == EpisodeSortOrder.RANDOM
|
||||
|| ascending == EpisodeSortOrder.EPISODE_TITLE_A_Z
|
||||
|| (feed?.isLocalFeed == true && ascending == EpisodeSortOrder.EPISODE_FILENAME_A_Z)) {
|
||||
super.onAddItem(title, ascending, descending, ascendingIsDefault)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -5,7 +5,7 @@ import ac.mdiq.podcini.storage.database.RealmDB.realm
|
|||
import ac.mdiq.podcini.storage.database.RealmDB.runOnIOScope
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeMedia
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.actions.menuhandler.MenuItemUtils
|
||||
import ac.mdiq.podcini.ui.activity.MainActivity
|
||||
import ac.mdiq.podcini.ui.adapter.EpisodesAdapter
|
||||
|
@ -32,7 +32,7 @@ import kotlin.math.min
|
|||
|
||||
@UnstableApi class HistoryFragment : BaseEpisodesFragment() {
|
||||
|
||||
private var sortOrder : SortOrder = SortOrder.PLAYED_DATE_NEW_OLD
|
||||
private var sortOrder : EpisodeSortOrder = EpisodeSortOrder.PLAYED_DATE_NEW_OLD
|
||||
private var startDate : Long = 0L
|
||||
private var endDate : Long = Date().time
|
||||
|
||||
|
@ -190,17 +190,17 @@ import kotlin.math.min
|
|||
}
|
||||
|
||||
class HistorySortDialog : EpisodeSortDialog() {
|
||||
override fun onAddItem(title: Int, ascending: SortOrder, descending: SortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == SortOrder.DATE_OLD_NEW || ascending == SortOrder.PLAYED_DATE_OLD_NEW
|
||||
|| ascending == SortOrder.COMPLETED_DATE_OLD_NEW
|
||||
|| ascending == SortOrder.DURATION_SHORT_LONG || ascending == SortOrder.EPISODE_TITLE_A_Z
|
||||
|| ascending == SortOrder.SIZE_SMALL_LARGE || ascending == SortOrder.FEED_TITLE_A_Z) {
|
||||
override fun onAddItem(title: Int, ascending: EpisodeSortOrder, descending: EpisodeSortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending == EpisodeSortOrder.DATE_OLD_NEW || ascending == EpisodeSortOrder.PLAYED_DATE_OLD_NEW
|
||||
|| ascending == EpisodeSortOrder.COMPLETED_DATE_OLD_NEW
|
||||
|| ascending == EpisodeSortOrder.DURATION_SHORT_LONG || ascending == EpisodeSortOrder.EPISODE_TITLE_A_Z
|
||||
|| ascending == EpisodeSortOrder.SIZE_SMALL_LARGE || ascending == EpisodeSortOrder.FEED_TITLE_A_Z) {
|
||||
super.onAddItem(title, ascending, descending, ascendingIsDefault)
|
||||
}
|
||||
}
|
||||
override fun onSelectionChanged() {
|
||||
super.onSelectionChanged()
|
||||
EventFlow.postEvent(FlowEvent.HistoryEvent(sortOrder?: SortOrder.PLAYED_DATE_NEW_OLD))
|
||||
EventFlow.postEvent(FlowEvent.HistoryEvent(sortOrder?: EpisodeSortOrder.PLAYED_DATE_NEW_OLD))
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -219,7 +219,7 @@ import kotlin.math.min
|
|||
* @return The playback history. The FeedItems are sorted by their media's playbackCompletionDate in descending order.
|
||||
*/
|
||||
fun getHistory(offset: Int, limit: Int, start: Long = 0L, end: Long = Date().time,
|
||||
sortOrder: SortOrder = SortOrder.PLAYED_DATE_NEW_OLD): List<Episode> {
|
||||
sortOrder: EpisodeSortOrder = EpisodeSortOrder.PLAYED_DATE_NEW_OLD): List<Episode> {
|
||||
Logd(TAG, "getHistory() called")
|
||||
val medias = realm.query(EpisodeMedia::class).query("lastPlayedTime > $0 AND lastPlayedTime <= $1", start, end).find()
|
||||
var episodes: MutableList<Episode> = mutableListOf()
|
||||
|
|
|
@ -19,7 +19,7 @@ import ac.mdiq.podcini.storage.model.Episode
|
|||
import ac.mdiq.podcini.storage.model.EpisodeMedia
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.utils.EpisodeUtil
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.actions.EpisodeMultiSelectHandler
|
||||
import ac.mdiq.podcini.ui.actions.menuhandler.EpisodeMenuHandler
|
||||
import ac.mdiq.podcini.ui.actions.menuhandler.MenuItemUtils
|
||||
|
@ -572,14 +572,14 @@ import java.util.*
|
|||
binding.keepSortedCheckbox.setEnabled(UserPreferences.isQueueKeepSorted)
|
||||
return view
|
||||
}
|
||||
override fun onAddItem(title: Int, ascending: SortOrder, descending: SortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending != SortOrder.EPISODE_FILENAME_A_Z && ascending != SortOrder.SIZE_SMALL_LARGE)
|
||||
override fun onAddItem(title: Int, ascending: EpisodeSortOrder, descending: EpisodeSortOrder, ascendingIsDefault: Boolean) {
|
||||
if (ascending != EpisodeSortOrder.EPISODE_FILENAME_A_Z && ascending != EpisodeSortOrder.SIZE_SMALL_LARGE)
|
||||
super.onAddItem(title, ascending, descending, ascendingIsDefault)
|
||||
}
|
||||
@UnstableApi override fun onSelectionChanged() {
|
||||
super.onSelectionChanged()
|
||||
binding.keepSortedCheckbox.setEnabled(sortOrder != SortOrder.RANDOM)
|
||||
if (sortOrder == SortOrder.RANDOM) binding.keepSortedCheckbox.setChecked(false)
|
||||
binding.keepSortedCheckbox.setEnabled(sortOrder != EpisodeSortOrder.RANDOM)
|
||||
if (sortOrder == EpisodeSortOrder.RANDOM) binding.keepSortedCheckbox.setChecked(false)
|
||||
UserPreferences.isQueueKeepSorted = binding.keepSortedCheckbox.isChecked
|
||||
UserPreferences.queueKeepSortedOrder = sortOrder
|
||||
reorderQueue(sortOrder, true)
|
||||
|
@ -590,7 +590,7 @@ import java.util.*
|
|||
* QueueUpdateBroadcast. This option should be set to `false`
|
||||
* if the caller wants to avoid unexpected updates of the GUI.
|
||||
*/
|
||||
private fun reorderQueue(sortOrder: SortOrder?, broadcastUpdate: Boolean) : Job {
|
||||
private fun reorderQueue(sortOrder: EpisodeSortOrder?, broadcastUpdate: Boolean) : Job {
|
||||
Logd(TAG, "reorderQueue called")
|
||||
if (sortOrder == null) {
|
||||
Logd(TAG, "reorderQueue() - sortOrder is null. Do nothing.")
|
||||
|
@ -664,11 +664,11 @@ import java.util.*
|
|||
@UnstableApi
|
||||
override fun afterBindViewHolder(holder: EpisodeViewHolder, pos: Int) {
|
||||
if (inActionMode() || !dragDropEnabled) {
|
||||
holder.dragHandle.setVisibility(View.GONE)
|
||||
holder.dragHandle.visibility = View.GONE
|
||||
holder.dragHandle.setOnTouchListener(null)
|
||||
// holder.coverHolder.setOnTouchListener(null)
|
||||
} else {
|
||||
holder.dragHandle.setVisibility(View.VISIBLE)
|
||||
holder.dragHandle.visibility = View.VISIBLE
|
||||
holder.dragHandle.setOnTouchListener { _: View?, event: MotionEvent ->
|
||||
if (event.actionMasked == MotionEvent.ACTION_DOWN) swipeActions.startDrag(holder)
|
||||
false
|
||||
|
|
|
@ -4,7 +4,8 @@ import ac.mdiq.podcini.R
|
|||
import ac.mdiq.podcini.databinding.*
|
||||
import ac.mdiq.podcini.net.feed.FeedUpdateManager
|
||||
import ac.mdiq.podcini.preferences.UserPreferences
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.feedOrder
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.feedOrderBy
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.feedOrderDir
|
||||
import ac.mdiq.podcini.preferences.UserPreferences.useGridLayout
|
||||
import ac.mdiq.podcini.storage.database.Feeds.getFeedList
|
||||
import ac.mdiq.podcini.storage.database.Feeds.getTags
|
||||
|
@ -17,7 +18,7 @@ import ac.mdiq.podcini.ui.actions.menuhandler.FeedMenuHandler
|
|||
import ac.mdiq.podcini.ui.actions.menuhandler.MenuItemUtils
|
||||
import ac.mdiq.podcini.ui.activity.MainActivity
|
||||
import ac.mdiq.podcini.ui.adapter.SelectableAdapter
|
||||
import ac.mdiq.podcini.ui.dialog.FeedSortDialog
|
||||
import ac.mdiq.podcini.ui.dialog.FeedSortDialogNew
|
||||
import ac.mdiq.podcini.ui.dialog.RemoveFeedDialog
|
||||
import ac.mdiq.podcini.ui.dialog.TagSettingsDialog
|
||||
import ac.mdiq.podcini.ui.utils.CoverLoader
|
||||
|
@ -288,7 +289,7 @@ class SubscriptionsFragment : Fragment(), Toolbar.OnMenuItemClickListener, Selec
|
|||
val itemId = item.itemId
|
||||
when (itemId) {
|
||||
R.id.action_search -> (activity as MainActivity).loadChildFragment(SearchFragment.newInstance())
|
||||
R.id.subscriptions_sort -> FeedSortDialog.showDialog(requireContext())
|
||||
R.id.subscriptions_sort -> FeedSortDialogNew().show(childFragmentManager, "FeedSortDialog")
|
||||
R.id.refresh_item -> FeedUpdateManager.runOnceOrAsk(requireContext())
|
||||
else -> return false
|
||||
}
|
||||
|
@ -332,28 +333,29 @@ class SubscriptionsFragment : Fragment(), Toolbar.OnMenuItemClickListener, Selec
|
|||
|
||||
private fun sortFeeds() {
|
||||
Logd(TAG, "sortFeeds() called")
|
||||
val feedOrder = feedOrder
|
||||
val feedOrder = feedOrderBy
|
||||
val dir = 1 - 2*feedOrderDir // get from 0, 1 to 1, -1
|
||||
val comparator: Comparator<Feed> = when (feedOrder) {
|
||||
UserPreferences.FEED_ORDER_UNPLAYED -> {
|
||||
val episodes = realm.query(Episode::class).query("(playState == ${Episode.NEW} OR playState == ${Episode.UNPLAYED})").find()
|
||||
val counterMap = counterMap(episodes)
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
UserPreferences.FEED_ORDER_ALPHABETICAL -> {
|
||||
Comparator { lhs: Feed, rhs: Feed ->
|
||||
val t1 = lhs.title
|
||||
val t2 = rhs.title
|
||||
when {
|
||||
t1 == null -> 1
|
||||
t2 == null -> -1
|
||||
else -> t1.compareTo(t2, ignoreCase = true)
|
||||
t1 == null -> dir
|
||||
t2 == null -> -dir
|
||||
else -> t1.compareTo(t2, ignoreCase = true) * dir
|
||||
}
|
||||
}
|
||||
}
|
||||
UserPreferences.FEED_ORDER_MOST_PLAYED -> {
|
||||
val episodes = realm.query(Episode::class).query("playState == ${Episode.PLAYED}").find()
|
||||
val counterMap = counterMap(episodes)
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
UserPreferences.FEED_ORDER_LAST_UPDATED -> {
|
||||
val episodes = realm.query(Episode::class).sort("pubDate", Sort.DESCENDING).find()
|
||||
|
@ -363,7 +365,7 @@ class SubscriptionsFragment : Fragment(), Toolbar.OnMenuItemClickListener, Selec
|
|||
val pDateOld = counterMap[feedId] ?: 0
|
||||
if (pDateOld < episode.pubDate) counterMap[feedId] = episode.pubDate
|
||||
}
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
UserPreferences.FEED_ORDER_LAST_UNREAD_UPDATED -> {
|
||||
val episodes = realm.query(Episode::class)
|
||||
|
@ -374,24 +376,24 @@ class SubscriptionsFragment : Fragment(), Toolbar.OnMenuItemClickListener, Selec
|
|||
val pDateOld = counterMap[feedId] ?: 0
|
||||
if (pDateOld < episode.pubDate) counterMap[feedId] = episode.pubDate
|
||||
}
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
UserPreferences.FEED_ORDER_DOWNLOADED -> {
|
||||
val episodes = realm.query(Episode::class).query("media.downloaded == true").find()
|
||||
val counterMap = counterMap(episodes)
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
UserPreferences.FEED_ORDER_DOWNLOADED_UNPLAYED -> {
|
||||
val episodes = realm.query(Episode::class)
|
||||
.query("(playState == ${Episode.NEW} OR playState == ${Episode.UNPLAYED}) AND media.downloaded == true").find()
|
||||
val counterMap = counterMap(episodes)
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
// doing FEED_ORDER_NEW
|
||||
else -> {
|
||||
val episodes = realm.query(Episode::class).query("playState == ${Episode.NEW}").find()
|
||||
val counterMap = counterMap(episodes)
|
||||
comparator(counterMap)
|
||||
comparator(counterMap, dir)
|
||||
}
|
||||
}
|
||||
synchronized(feedList) { feedList.sortWith(comparator) }
|
||||
|
@ -407,15 +409,15 @@ class SubscriptionsFragment : Fragment(), Toolbar.OnMenuItemClickListener, Selec
|
|||
return counterMap
|
||||
}
|
||||
|
||||
private fun comparator(counterMap: Map<Long, Long>): Comparator<Feed> {
|
||||
private fun comparator(counterMap: Map<Long, Long>, dir: Int): Comparator<Feed> {
|
||||
return Comparator { lhs: Feed, rhs: Feed ->
|
||||
val counterLhs = counterMap[lhs.id]?:0
|
||||
val counterRhs = counterMap[rhs.id]?:0
|
||||
when {
|
||||
// reverse natural order: podcast with most unplayed episodes first
|
||||
counterLhs > counterRhs -> -1
|
||||
counterLhs == counterRhs -> lhs.title?.compareTo(rhs.title!!, ignoreCase = true) ?: -1
|
||||
else -> 1
|
||||
counterLhs > counterRhs -> -dir
|
||||
counterLhs == counterRhs -> (lhs.title?.compareTo(rhs.title!!, ignoreCase = true) ?: -1) * dir
|
||||
else -> dir
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,10 +18,12 @@ import ac.mdiq.podcini.ui.actions.actionbutton.TTSActionButton
|
|||
import ac.mdiq.podcini.ui.activity.MainActivity
|
||||
import ac.mdiq.podcini.ui.utils.CoverLoader
|
||||
import ac.mdiq.podcini.ui.utils.ThemeUtils
|
||||
import ac.mdiq.podcini.ui.utils.ThemeUtils.getColorFromAttr
|
||||
import ac.mdiq.podcini.ui.view.CircularProgressBar
|
||||
import ac.mdiq.podcini.util.Converter
|
||||
import ac.mdiq.podcini.util.DateFormatter
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import android.graphics.PorterDuff
|
||||
import android.text.Layout
|
||||
import android.text.format.Formatter
|
||||
import android.util.Log
|
||||
|
@ -34,6 +36,7 @@ import android.widget.ProgressBar
|
|||
import android.widget.TextView
|
||||
import androidx.appcompat.content.res.AppCompatResources
|
||||
import androidx.cardview.widget.CardView
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.media3.common.util.UnstableApi
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.google.android.material.elevation.SurfaceColors
|
||||
|
@ -93,21 +96,25 @@ open class EpisodeViewHolder(private val activity: MainActivity, parent: ViewGro
|
|||
this.episode = item
|
||||
placeholder.text = item.feed?.title
|
||||
title.text = item.title
|
||||
container.alpha = if (item.isPlayed()) 0.75f else 1.0f
|
||||
if (item.isPlayed()) {
|
||||
leftPadding.contentDescription = item.title + ". " + activity.getString(R.string.is_played)
|
||||
binding.playedMark.visibility = View.VISIBLE
|
||||
binding.playedMark.alpha = 1.0f
|
||||
} else {
|
||||
leftPadding.contentDescription = item.title
|
||||
binding.playedMark.visibility = View.GONE
|
||||
container.alpha = if (item.isPlayed()) 0.7f else 1.0f
|
||||
leftPadding.contentDescription = item.title
|
||||
binding.playedMark.visibility = View.GONE
|
||||
when {
|
||||
item.isPlayed() -> {
|
||||
leftPadding.contentDescription = item.title + ". " + activity.getString(R.string.is_played)
|
||||
binding.playedMark.visibility = View.VISIBLE
|
||||
binding.playedMark.alpha = 1.0f
|
||||
}
|
||||
item.isNew -> {
|
||||
binding.txtvPubDate.setTextColor(getColorFromAttr(activity, androidx.appcompat.R.attr.colorAccent))
|
||||
}
|
||||
}
|
||||
|
||||
setPubDate(item)
|
||||
|
||||
isFavorite.visibility = if (item.isFavorite) View.VISIBLE else View.GONE
|
||||
isInQueue.visibility = if (curQueue.isInQueue(item)) View.VISIBLE else View.GONE
|
||||
container.alpha = if (item.isPlayed()) 0.75f else 1.0f
|
||||
// container.alpha = if (item.isPlayed()) 0.7f else 1.0f
|
||||
|
||||
val newButton = EpisodeActionButton.forItem(item)
|
||||
// Logd(TAG, "Trying to bind button ${actionButton?.TAG} ${newButton.TAG} ${item.title}")
|
||||
|
@ -152,6 +159,7 @@ open class EpisodeViewHolder(private val activity: MainActivity, parent: ViewGro
|
|||
Logd(TAG, "setting cover to ic_launcher")
|
||||
cover.setImageDrawable(AppCompatResources.getDrawable(activity, R.drawable.ic_launcher_foreground))
|
||||
}
|
||||
// if (item.isNew) cover.setColorFilter(ContextCompat.getColor(activity, R.color.gradient_100), PorterDuff.Mode.MULTIPLY)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -5,7 +5,7 @@ import ac.mdiq.podcini.net.download.DownloadStatus
|
|||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.Playable
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.util.Logd
|
||||
import android.content.Context
|
||||
import android.view.KeyEvent
|
||||
|
@ -93,7 +93,7 @@ sealed class FlowEvent {
|
|||
}
|
||||
}
|
||||
|
||||
data class HistoryEvent(val sortOrder: SortOrder = SortOrder.PLAYED_DATE_NEW_OLD, val startDate: Long = 0, val endDate: Long = Date().time) : FlowEvent()
|
||||
data class HistoryEvent(val sortOrder: EpisodeSortOrder = EpisodeSortOrder.PLAYED_DATE_NEW_OLD, val startDate: Long = 0, val endDate: Long = Date().time) : FlowEvent()
|
||||
|
||||
data class SleepTimerUpdatedEvent(private val timeLeft: Long) : FlowEvent() {
|
||||
val isOver: Boolean
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
package ac.mdiq.podcini.util.sorting
|
||||
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
|
@ -14,43 +14,43 @@ object EpisodesPermutors {
|
|||
* @return Permutor that sorts a list appropriate to the given sort order.
|
||||
*/
|
||||
@JvmStatic
|
||||
fun getPermutor(sortOrder: SortOrder): Permutor<Episode> {
|
||||
fun getPermutor(sortOrder: EpisodeSortOrder): Permutor<Episode> {
|
||||
var comparator: Comparator<Episode>? = null
|
||||
var permutor: Permutor<Episode>? = null
|
||||
|
||||
when (sortOrder) {
|
||||
SortOrder.EPISODE_TITLE_A_Z -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemTitle(f1).compareTo(itemTitle(f2)) }
|
||||
SortOrder.EPISODE_TITLE_Z_A -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemTitle(f2).compareTo(itemTitle(f1)) }
|
||||
SortOrder.DATE_OLD_NEW -> comparator = Comparator { f1: Episode?, f2: Episode? -> pubDate(f1).compareTo(pubDate(f2)) }
|
||||
SortOrder.DATE_NEW_OLD -> comparator = Comparator { f1: Episode?, f2: Episode? -> pubDate(f2).compareTo(pubDate(f1)) }
|
||||
SortOrder.DURATION_SHORT_LONG -> comparator = Comparator { f1: Episode?, f2: Episode? -> duration(f1).compareTo(duration(f2)) }
|
||||
SortOrder.DURATION_LONG_SHORT -> comparator = Comparator { f1: Episode?, f2: Episode? -> duration(f2).compareTo(duration(f1)) }
|
||||
SortOrder.EPISODE_FILENAME_A_Z -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemLink(f1).compareTo(itemLink(f2)) }
|
||||
SortOrder.EPISODE_FILENAME_Z_A -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemLink(f2).compareTo(itemLink(f1)) }
|
||||
SortOrder.PLAYED_DATE_OLD_NEW -> comparator = Comparator { f1: Episode?, f2: Episode? -> playDate(f1).compareTo(playDate(f2)) }
|
||||
SortOrder.PLAYED_DATE_NEW_OLD -> comparator = Comparator { f1: Episode?, f2: Episode? -> playDate(f2).compareTo(playDate(f1)) }
|
||||
SortOrder.COMPLETED_DATE_OLD_NEW -> comparator = Comparator { f1: Episode?, f2: Episode? -> completeDate(f1).compareTo(completeDate(f2)) }
|
||||
SortOrder.COMPLETED_DATE_NEW_OLD -> comparator = Comparator { f1: Episode?, f2: Episode? -> completeDate(f2).compareTo(completeDate(f1)) }
|
||||
EpisodeSortOrder.EPISODE_TITLE_A_Z -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemTitle(f1).compareTo(itemTitle(f2)) }
|
||||
EpisodeSortOrder.EPISODE_TITLE_Z_A -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemTitle(f2).compareTo(itemTitle(f1)) }
|
||||
EpisodeSortOrder.DATE_OLD_NEW -> comparator = Comparator { f1: Episode?, f2: Episode? -> pubDate(f1).compareTo(pubDate(f2)) }
|
||||
EpisodeSortOrder.DATE_NEW_OLD -> comparator = Comparator { f1: Episode?, f2: Episode? -> pubDate(f2).compareTo(pubDate(f1)) }
|
||||
EpisodeSortOrder.DURATION_SHORT_LONG -> comparator = Comparator { f1: Episode?, f2: Episode? -> duration(f1).compareTo(duration(f2)) }
|
||||
EpisodeSortOrder.DURATION_LONG_SHORT -> comparator = Comparator { f1: Episode?, f2: Episode? -> duration(f2).compareTo(duration(f1)) }
|
||||
EpisodeSortOrder.EPISODE_FILENAME_A_Z -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemLink(f1).compareTo(itemLink(f2)) }
|
||||
EpisodeSortOrder.EPISODE_FILENAME_Z_A -> comparator = Comparator { f1: Episode?, f2: Episode? -> itemLink(f2).compareTo(itemLink(f1)) }
|
||||
EpisodeSortOrder.PLAYED_DATE_OLD_NEW -> comparator = Comparator { f1: Episode?, f2: Episode? -> playDate(f1).compareTo(playDate(f2)) }
|
||||
EpisodeSortOrder.PLAYED_DATE_NEW_OLD -> comparator = Comparator { f1: Episode?, f2: Episode? -> playDate(f2).compareTo(playDate(f1)) }
|
||||
EpisodeSortOrder.COMPLETED_DATE_OLD_NEW -> comparator = Comparator { f1: Episode?, f2: Episode? -> completeDate(f1).compareTo(completeDate(f2)) }
|
||||
EpisodeSortOrder.COMPLETED_DATE_NEW_OLD -> comparator = Comparator { f1: Episode?, f2: Episode? -> completeDate(f2).compareTo(completeDate(f1)) }
|
||||
|
||||
SortOrder.FEED_TITLE_A_Z -> comparator = Comparator { f1: Episode?, f2: Episode? -> feedTitle(f1).compareTo(feedTitle(f2)) }
|
||||
SortOrder.FEED_TITLE_Z_A -> comparator = Comparator { f1: Episode?, f2: Episode? -> feedTitle(f2).compareTo(feedTitle(f1)) }
|
||||
SortOrder.RANDOM -> permutor = object : Permutor<Episode> {
|
||||
EpisodeSortOrder.FEED_TITLE_A_Z -> comparator = Comparator { f1: Episode?, f2: Episode? -> feedTitle(f1).compareTo(feedTitle(f2)) }
|
||||
EpisodeSortOrder.FEED_TITLE_Z_A -> comparator = Comparator { f1: Episode?, f2: Episode? -> feedTitle(f2).compareTo(feedTitle(f1)) }
|
||||
EpisodeSortOrder.RANDOM -> permutor = object : Permutor<Episode> {
|
||||
override fun reorder(queue: MutableList<Episode>?) {
|
||||
if (!queue.isNullOrEmpty()) queue.shuffle()
|
||||
}
|
||||
}
|
||||
SortOrder.SMART_SHUFFLE_OLD_NEW -> permutor = object : Permutor<Episode> {
|
||||
EpisodeSortOrder.SMART_SHUFFLE_OLD_NEW -> permutor = object : Permutor<Episode> {
|
||||
override fun reorder(queue: MutableList<Episode>?) {
|
||||
if (!queue.isNullOrEmpty()) smartShuffle(queue as MutableList<Episode?>, true)
|
||||
}
|
||||
}
|
||||
SortOrder.SMART_SHUFFLE_NEW_OLD -> permutor = object : Permutor<Episode> {
|
||||
EpisodeSortOrder.SMART_SHUFFLE_NEW_OLD -> permutor = object : Permutor<Episode> {
|
||||
override fun reorder(queue: MutableList<Episode>?) {
|
||||
if (!queue.isNullOrEmpty()) smartShuffle(queue as MutableList<Episode?>, false)
|
||||
}
|
||||
}
|
||||
SortOrder.SIZE_SMALL_LARGE -> comparator = Comparator { f1: Episode?, f2: Episode? -> size(f1).compareTo(size(f2)) }
|
||||
SortOrder.SIZE_LARGE_SMALL -> comparator = Comparator { f1: Episode?, f2: Episode? -> size(f2).compareTo(size(f1)) }
|
||||
EpisodeSortOrder.SIZE_SMALL_LARGE -> comparator = Comparator { f1: Episode?, f2: Episode? -> size(f1).compareTo(size(f2)) }
|
||||
EpisodeSortOrder.SIZE_LARGE_SMALL -> comparator = Comparator { f1: Episode?, f2: Episode? -> size(f2).compareTo(size(f1)) }
|
||||
}
|
||||
if (comparator != null) {
|
||||
val comparator2: Comparator<Episode> = comparator
|
||||
|
|
|
@ -60,15 +60,13 @@
|
|||
<string name="drawer_open">افتح القائمة</string>
|
||||
<string name="drawer_close">اغلق القائمة</string>
|
||||
<string name="drawer_preferences">تفضيلات الدرج</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">رتب بعدد الحلقات</string>
|
||||
<string name="drawer_feed_order_alphabetical">رتب أبجديا</string>
|
||||
<string name="drawer_feed_order_last_update">رتب بتاريخ النشر</string>
|
||||
<string name="drawer_feed_order_most_played">رتب بعدد الحلقات المشغلة</string>
|
||||
<string name="feed_order_alphabetical">رتب أبجديا</string>
|
||||
<string name="feed_order_last_update">رتب بتاريخ النشر</string>
|
||||
<string name="feed_order_most_played">رتب بعدد الحلقات المشغلة</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">عدد الحلقات غير المشغلة</string>
|
||||
<string name="drawer_feed_counter_downloaded">عدد الحلقات المنزلة</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">عدد الحلقات المنزلة وغير المشغلة</string>
|
||||
<string name="drawer_feed_counter_none">بدون</string>
|
||||
<string name="feed_order_unplayed_count">عدد الحلقات غير المشغلة</string>
|
||||
<string name="feed_counter_downloaded">عدد الحلقات المنزلة</string>
|
||||
<string name="feed_counter_downloaded_unplayed">عدد الحلقات المنزلة وغير المشغلة</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">لا يوجد برنامج متوافق</string>
|
||||
<string name="export_logs_menu_title">اصدار سجلات مفصلة</string>
|
||||
|
|
|
@ -24,13 +24,11 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">Abrir el menú</string>
|
||||
<string name="drawer_close">Zarrar el menú</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Pol contador</string>
|
||||
<string name="drawer_feed_order_alphabetical">Alfabéticamente</string>
|
||||
<string name="drawer_feed_order_last_update">Pola data d\'espublizamientu</string>
|
||||
<string name="drawer_feed_order_most_played">Pol númberu d\'episodios reproducíos</string>
|
||||
<string name="drawer_feed_order_unplayed">Episodios ensin reproducir</string>
|
||||
<string name="drawer_feed_counter_downloaded">Episodios baxaos</string>
|
||||
<string name="drawer_feed_counter_none">Nada</string>
|
||||
<string name="feed_order_alphabetical">Alfabéticamente</string>
|
||||
<string name="feed_order_last_update">Pola data d\'espublizamientu</string>
|
||||
<string name="feed_order_most_played">Pol númberu d\'episodios reproducíos</string>
|
||||
<string name="feed_order_unplayed_count">Episodios ensin reproducir</string>
|
||||
<string name="feed_counter_downloaded">Episodios baxaos</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nun s\'atoparon aplicaciones compatibles</string>
|
||||
<string name="export_logs_menu_title">Esportar el rexistru detalláu</string>
|
||||
|
|
|
@ -55,15 +55,13 @@
|
|||
<string name="drawer_open">Digeriñ al lañser</string>
|
||||
<string name="drawer_close">Serriñ al lañser</string>
|
||||
<string name="drawer_preferences">Gwellvezioù ar stalaf</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Rummañ dre gonter</string>
|
||||
<string name="drawer_feed_order_alphabetical">Rummañ dre urzh al lizherenneg</string>
|
||||
<string name="drawer_feed_order_last_update">Rummañ dre an deiziad embann</string>
|
||||
<string name="drawer_feed_order_most_played">Rummañ dre an niver a rannoù lennet</string>
|
||||
<string name="feed_order_alphabetical">Rummañ dre urzh al lizherenneg</string>
|
||||
<string name="feed_order_last_update">Rummañ dre an deiziad embann</string>
|
||||
<string name="feed_order_most_played">Rummañ dre an niver a rannoù lennet</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Niver a rannoù n\'int ket bet lennet</string>
|
||||
<string name="drawer_feed_counter_downloaded">Niver a rannoù pellgarget</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Niver a rannoù pellgarget n\'int ket bet lennet</string>
|
||||
<string name="drawer_feed_counter_none">Hini ebet</string>
|
||||
<string name="feed_order_unplayed_count">Niver a rannoù n\'int ket bet lennet</string>
|
||||
<string name="feed_counter_downloaded">Niver a rannoù pellgarget</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Niver a rannoù pellgarget n\'int ket bet lennet</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">N\'eo ket bet kavet arloadoù keverlec\'h</string>
|
||||
<string name="export_logs_menu_title">Ezporzhiañ ar c\'herzhlevrioù dre ar munud</string>
|
||||
|
|
|
@ -56,15 +56,13 @@
|
|||
<string name="drawer_open">Obre menú</string>
|
||||
<string name="drawer_close">Tanca menú</string>
|
||||
<string name="drawer_preferences">Preferències</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Ordre per comptador</string>
|
||||
<string name="drawer_feed_order_alphabetical">Ordre alfabètic</string>
|
||||
<string name="drawer_feed_order_last_update">Ordre per data de publicació</string>
|
||||
<string name="drawer_feed_order_most_played">Ordre per número d\'episodis reproduïts</string>
|
||||
<string name="feed_order_alphabetical">Ordre alfabètic</string>
|
||||
<string name="feed_order_last_update">Ordre per data de publicació</string>
|
||||
<string name="feed_order_most_played">Ordre per número d\'episodis reproduïts</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Número d\'episodis per reproduir</string>
|
||||
<string name="drawer_feed_counter_downloaded">Número d\'episodis descarregats</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Número de descàrregues i episodis sense reproduir</string>
|
||||
<string name="drawer_feed_counter_none">Cap</string>
|
||||
<string name="feed_order_unplayed_count">Número d\'episodis per reproduir</string>
|
||||
<string name="feed_counter_downloaded">Número d\'episodis descarregats</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Número de descàrregues i episodis sense reproduir</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">No s\'han trobat aplicacions compatibles</string>
|
||||
<string name="export_logs_menu_title">Exporta registres detallats</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Otevřít menu</string>
|
||||
<string name="drawer_close">Zavřít menu</string>
|
||||
<string name="drawer_preferences">Nastavení postranního panelu</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Řadit dle čítače</string>
|
||||
<string name="drawer_feed_order_alphabetical">Řadit abecedně</string>
|
||||
<string name="drawer_feed_order_last_update">Řadit dle data zveřejnění</string>
|
||||
<string name="drawer_feed_order_most_played">Řadit podle počtu poslechnutých epizod</string>
|
||||
<string name="feed_order_alphabetical">Řadit abecedně</string>
|
||||
<string name="feed_order_last_update">Řadit dle data zveřejnění</string>
|
||||
<string name="feed_order_most_played">Řadit podle počtu poslechnutých epizod</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Počet nepřehraných epizod</string>
|
||||
<string name="drawer_feed_counter_downloaded">Počet stažených epizod</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Počet stažených a nepřehraných epizod</string>
|
||||
<string name="drawer_feed_counter_none">Žádné</string>
|
||||
<string name="feed_order_unplayed_count">Počet nepřehraných epizod</string>
|
||||
<string name="feed_counter_downloaded">Počet stažených epizod</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Počet stažených a nepřehraných epizod</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nenalezena kompatibilní aplikace</string>
|
||||
<string name="export_logs_menu_title">Exportovat detailní záznamy</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Åbn menu</string>
|
||||
<string name="drawer_close">Luk menu</string>
|
||||
<string name="drawer_preferences">Præferencer for panel</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sorter efter tæller</string>
|
||||
<string name="drawer_feed_order_alphabetical">Sorter alfabetisk</string>
|
||||
<string name="drawer_feed_order_last_update">Sorter efter udgivelsesdato</string>
|
||||
<string name="drawer_feed_order_most_played">Sorter efter antal afspillede afsnit</string>
|
||||
<string name="feed_order_alphabetical">Sorter alfabetisk</string>
|
||||
<string name="feed_order_last_update">Sorter efter udgivelsesdato</string>
|
||||
<string name="feed_order_most_played">Sorter efter antal afspillede afsnit</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Antal uafspillede afsnit</string>
|
||||
<string name="drawer_feed_counter_downloaded">Antal overførte afsnit</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Antal overførte og uafspillede afsnit</string>
|
||||
<string name="drawer_feed_counter_none">Ingen</string>
|
||||
<string name="feed_order_unplayed_count">Antal uafspillede afsnit</string>
|
||||
<string name="feed_counter_downloaded">Antal overførte afsnit</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Antal overførte og uafspillede afsnit</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Ingen kompatible apper fundet.</string>
|
||||
<string name="export_logs_menu_title">Eksporter detaljeret log</string>
|
||||
|
|
|
@ -61,15 +61,13 @@
|
|||
<string name="drawer_open">Menü öffnen</string>
|
||||
<string name="drawer_close">Menü schließen</string>
|
||||
<string name="drawer_preferences">Seitenleisten-Einstellungen</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Nach Zähler sortieren </string>
|
||||
<string name="drawer_feed_order_alphabetical">Alphabetisch sortieren</string>
|
||||
<string name="drawer_feed_order_last_update">Nach Veröffentlichungsdatum sortieren</string>
|
||||
<string name="drawer_feed_order_most_played">Nach Anzahl gespielter Episoden sortieren</string>
|
||||
<string name="feed_order_alphabetical">Alphabetisch sortieren</string>
|
||||
<string name="feed_order_last_update">Nach Veröffentlichungsdatum sortieren</string>
|
||||
<string name="feed_order_most_played">Nach Anzahl gespielter Episoden sortieren</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Anzahl nicht abgespielter Episoden</string>
|
||||
<string name="drawer_feed_counter_downloaded">Anzahl heruntergeladener Episoden</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Anzahl heruntergeladener und nicht abgespielter Episoden</string>
|
||||
<string name="drawer_feed_counter_none">Keine</string>
|
||||
<string name="feed_order_unplayed_count">Anzahl nicht abgespielter Episoden</string>
|
||||
<string name="feed_counter_downloaded">Anzahl heruntergeladener Episoden</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Anzahl heruntergeladener und nicht abgespielter Episoden</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Keine kompatiblen Apps gefunden</string>
|
||||
<string name="export_logs_menu_title">Detaillierte Logs exportieren</string>
|
||||
|
|
|
@ -60,15 +60,13 @@
|
|||
<string name="drawer_open">Abrir menú</string>
|
||||
<string name="drawer_close">Cerrar menú</string>
|
||||
<string name="drawer_preferences">Preferencias del cajón</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Ordenar por contador</string>
|
||||
<string name="drawer_feed_order_alphabetical">Ordenar alfabéticamente</string>
|
||||
<string name="drawer_feed_order_last_update">Ordenar por fecha de publicación</string>
|
||||
<string name="drawer_feed_order_most_played">Ordenar por número de episodios reproducidos</string>
|
||||
<string name="feed_order_alphabetical">Ordenar alfabéticamente</string>
|
||||
<string name="feed_order_last_update">Ordenar por fecha de publicación</string>
|
||||
<string name="feed_order_most_played">Ordenar por número de episodios reproducidos</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Número de episodios no reproducidos</string>
|
||||
<string name="drawer_feed_counter_downloaded">Número de episodios descargados</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Número de episodios descargados y no reproducidos</string>
|
||||
<string name="drawer_feed_counter_none">Ninguno</string>
|
||||
<string name="feed_order_unplayed_count">Número de episodios no reproducidos</string>
|
||||
<string name="feed_counter_downloaded">Número de episodios descargados</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Número de episodios descargados y no reproducidos</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">No se encontró ninguna aplicación compatible</string>
|
||||
<string name="export_logs_menu_title">Exportar registros detallados</string>
|
||||
|
|
|
@ -48,14 +48,12 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">Ava menüü</string>
|
||||
<string name="drawer_close">Sulge menüü</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sorteeri arvu järgi</string>
|
||||
<string name="drawer_feed_order_alphabetical">Sorteeri tähestiku järgi</string>
|
||||
<string name="drawer_feed_order_last_update">Sorteeri avaldamise kuupäeva järgi</string>
|
||||
<string name="drawer_feed_order_most_played">Sorteeri kuulatud saadete järgi</string>
|
||||
<string name="drawer_feed_order_unplayed">Kuulamata saadete arv</string>
|
||||
<string name="drawer_feed_counter_downloaded">Allalaaditud saadete arv</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Allalaaditud kuulamata saadete arv</string>
|
||||
<string name="drawer_feed_counter_none">Pole</string>
|
||||
<string name="feed_order_alphabetical">Sorteeri tähestiku järgi</string>
|
||||
<string name="feed_order_last_update">Sorteeri avaldamise kuupäeva järgi</string>
|
||||
<string name="feed_order_most_played">Sorteeri kuulatud saadete järgi</string>
|
||||
<string name="feed_order_unplayed_count">Kuulamata saadete arv</string>
|
||||
<string name="feed_counter_downloaded">Allalaaditud saadete arv</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Allalaaditud kuulamata saadete arv</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Ühtegi ühilduvat rakendust ei leitud</string>
|
||||
<string name="export_logs_menu_title">Ekspordi täpne logi</string>
|
||||
|
|
|
@ -55,14 +55,12 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">Ireki menua</string>
|
||||
<string name="drawer_close">Itxi menua</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Antolatu kontagailuaren arabera</string>
|
||||
<string name="drawer_feed_order_alphabetical">Antolatu alfabetikoki</string>
|
||||
<string name="drawer_feed_order_last_update">Antolatu argitaratze dataz</string>
|
||||
<string name="drawer_feed_order_most_played">Antolatu ikusitako saioen arabera</string>
|
||||
<string name="feed_order_alphabetical">Antolatu alfabetikoki</string>
|
||||
<string name="feed_order_last_update">Antolatu argitaratze dataz</string>
|
||||
<string name="feed_order_most_played">Antolatu ikusitako saioen arabera</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Entzun gabeko saioen zenbatekoa</string>
|
||||
<string name="drawer_feed_counter_downloaded">Deskargatutako saio kopurua</string>
|
||||
<string name="drawer_feed_counter_none">Bat ere ez</string>
|
||||
<string name="feed_order_unplayed_count">Entzun gabeko saioen zenbatekoa</string>
|
||||
<string name="feed_counter_downloaded">Deskargatutako saio kopurua</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Ez dago app bateragarririk</string>
|
||||
<string name="export_logs_menu_title">Esportatu log zehatzak</string>
|
||||
|
|
|
@ -62,15 +62,13 @@
|
|||
<string name="drawer_open">باز کردن منو</string>
|
||||
<string name="drawer_close">بستن منو</string>
|
||||
<string name="drawer_preferences">ترجیحات کشو</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">مرتبسازی بر اساس شمارنده</string>
|
||||
<string name="drawer_feed_order_alphabetical">مرتبسازی بر اساس حروف الفبا</string>
|
||||
<string name="drawer_feed_order_last_update">مرتبسازی بر اساس تاریخ انتشار</string>
|
||||
<string name="drawer_feed_order_most_played">چینش بر اساس تعداد قسمتهای پخش شده</string>
|
||||
<string name="feed_order_alphabetical">مرتبسازی بر اساس حروف الفبا</string>
|
||||
<string name="feed_order_last_update">مرتبسازی بر اساس تاریخ انتشار</string>
|
||||
<string name="feed_order_most_played">چینش بر اساس تعداد قسمتهای پخش شده</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">تعداد قسمتهای پخشنشده</string>
|
||||
<string name="drawer_feed_counter_downloaded">تعداد قسمتهای بار گرفته</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">تعداد قسمتهای بار گرفته و پخش نشده</string>
|
||||
<string name="drawer_feed_counter_none">هیچیک</string>
|
||||
<string name="feed_order_unplayed_count">تعداد قسمتهای پخشنشده</string>
|
||||
<string name="feed_counter_downloaded">تعداد قسمتهای بار گرفته</string>
|
||||
<string name="feed_counter_downloaded_unplayed">تعداد قسمتهای بار گرفته و پخش نشده</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">هیچ اپ سازگاری پیدا نشد</string>
|
||||
<string name="export_logs_menu_title">برونریزی گزارش پرجزئیات</string>
|
||||
|
|
|
@ -55,15 +55,13 @@
|
|||
<string name="drawer_open">Avaa menu</string>
|
||||
<string name="drawer_close">Sulje menu</string>
|
||||
<string name="drawer_preferences">Hyllyasetukset</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Järjestä kertojen mukaan</string>
|
||||
<string name="drawer_feed_order_alphabetical">Järjestä aakkosellisesti</string>
|
||||
<string name="drawer_feed_order_last_update">Järjestä julkaisupäivän mukaan</string>
|
||||
<string name="drawer_feed_order_most_played">Järjestä toistettujen jaksojen mukaan</string>
|
||||
<string name="feed_order_alphabetical">Järjestä aakkosellisesti</string>
|
||||
<string name="feed_order_last_update">Järjestä julkaisupäivän mukaan</string>
|
||||
<string name="feed_order_most_played">Järjestä toistettujen jaksojen mukaan</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Toistamattomia jaksoja</string>
|
||||
<string name="drawer_feed_counter_downloaded">Ladattuja jaksoja</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Ladattuja ja toistamattomia jaksoja</string>
|
||||
<string name="drawer_feed_counter_none">Ei yhtään</string>
|
||||
<string name="feed_order_unplayed_count">Toistamattomia jaksoja</string>
|
||||
<string name="feed_counter_downloaded">Ladattuja jaksoja</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Ladattuja ja toistamattomia jaksoja</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Yhteensopivia sovelluksia ei löytynyt</string>
|
||||
<string name="export_logs_menu_title">Vie yksityiskohtaiset lokit</string>
|
||||
|
|
|
@ -61,15 +61,13 @@
|
|||
<string name="drawer_open">Ouvrir le menu</string>
|
||||
<string name="drawer_close">Fermer le menu</string>
|
||||
<string name="drawer_preferences">Préférences du volet</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Trier par compteur</string>
|
||||
<string name="drawer_feed_order_alphabetical">Trier par ordre alphabétique</string>
|
||||
<string name="drawer_feed_order_last_update">Trier par date de publication</string>
|
||||
<string name="drawer_feed_order_most_played">Trier par nombre lus</string>
|
||||
<string name="feed_order_alphabetical">Trier par ordre alphabétique</string>
|
||||
<string name="feed_order_last_update">Trier par date de publication</string>
|
||||
<string name="feed_order_most_played">Trier par nombre lus</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Épisodes non lus</string>
|
||||
<string name="drawer_feed_counter_downloaded">Épisodes téléchargés</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Épisodes téléchargés et non lus</string>
|
||||
<string name="drawer_feed_counter_none">Aucun</string>
|
||||
<string name="feed_order_unplayed_count">Épisodes non lus</string>
|
||||
<string name="feed_counter_downloaded">Épisodes téléchargés</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Épisodes téléchargés et non lus</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Aucune application compatible trouvée</string>
|
||||
<string name="export_logs_menu_title">Export détaillé des logs</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Abrir menú</string>
|
||||
<string name="drawer_close">Pechar menú</string>
|
||||
<string name="drawer_preferences">Preferencias do panel</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Ordenar polo contador</string>
|
||||
<string name="drawer_feed_order_alphabetical">Ordenar alfabeticamente</string>
|
||||
<string name="drawer_feed_order_last_update">Ordenar por data de publicación</string>
|
||||
<string name="drawer_feed_order_most_played">Ordenar por número de episodios reproducidos</string>
|
||||
<string name="feed_order_alphabetical">Ordenar alfabeticamente</string>
|
||||
<string name="feed_order_last_update">Ordenar por data de publicación</string>
|
||||
<string name="feed_order_most_played">Ordenar por número de episodios reproducidos</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Número de episodios non reproducidos</string>
|
||||
<string name="drawer_feed_counter_downloaded">Número de episodios descargados</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Número de episodios descargados e non escoitados</string>
|
||||
<string name="drawer_feed_counter_none">Ningún</string>
|
||||
<string name="feed_order_unplayed_count">Número de episodios non reproducidos</string>
|
||||
<string name="feed_counter_downloaded">Número de episodios descargados</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Número de episodios descargados e non escoitados</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Non se atopan apps compatibles</string>
|
||||
<string name="export_logs_menu_title">Exportar rexistro detallado</string>
|
||||
|
|
|
@ -51,15 +51,13 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">Menü megnyitása</string>
|
||||
<string name="drawer_close">Menü bezárása</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Rendezés számláló szerint</string>
|
||||
<string name="drawer_feed_order_alphabetical">Rendezés betűrendben</string>
|
||||
<string name="drawer_feed_order_last_update">Rendezés közzététel dátuma szerint</string>
|
||||
<string name="drawer_feed_order_most_played">Rendezés lejátszott epizódok szerint</string>
|
||||
<string name="feed_order_alphabetical">Rendezés betűrendben</string>
|
||||
<string name="feed_order_last_update">Rendezés közzététel dátuma szerint</string>
|
||||
<string name="feed_order_most_played">Rendezés lejátszott epizódok szerint</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Nem játszott epizódok száma</string>
|
||||
<string name="drawer_feed_counter_downloaded">Letöltött epizódok száma</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Letöltött és nem lejátszott epizódok száma</string>
|
||||
<string name="drawer_feed_counter_none">Nincs</string>
|
||||
<string name="feed_order_unplayed_count">Nem játszott epizódok száma</string>
|
||||
<string name="feed_counter_downloaded">Letöltött epizódok száma</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Letöltött és nem lejátszott epizódok száma</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nem található kompatibilis alkalmazás</string>
|
||||
<string name="export_logs_menu_title">Részletes naplók exportálása</string>
|
||||
|
|
|
@ -51,15 +51,13 @@
|
|||
<string name="drawer_open">Buka menu</string>
|
||||
<string name="drawer_close">Tutup menu</string>
|
||||
<string name="drawer_preferences">Preferensi laci</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Urutkan berdasarkan penghitung</string>
|
||||
<string name="drawer_feed_order_alphabetical">Urutkan menurut abjad</string>
|
||||
<string name="drawer_feed_order_last_update">Urutkan menurut tanggal publikasi</string>
|
||||
<string name="drawer_feed_order_most_played">Urutkan menurut jumlah episode yang diputar</string>
|
||||
<string name="feed_order_alphabetical">Urutkan menurut abjad</string>
|
||||
<string name="feed_order_last_update">Urutkan menurut tanggal publikasi</string>
|
||||
<string name="feed_order_most_played">Urutkan menurut jumlah episode yang diputar</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Jumlah episode yang belum diputar</string>
|
||||
<string name="drawer_feed_counter_downloaded">Jumlah episode yang diunduh</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Jumlah episode yang terunduh dan belum terputar</string>
|
||||
<string name="drawer_feed_counter_none">Tidak ada</string>
|
||||
<string name="feed_order_unplayed_count">Jumlah episode yang belum diputar</string>
|
||||
<string name="feed_counter_downloaded">Jumlah episode yang diunduh</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Jumlah episode yang terunduh dan belum terputar</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Tidak ada aplikasi kompatibel yang ditemukan</string>
|
||||
<string name="export_logs_menu_title">Ekspor log rinci</string>
|
||||
|
|
|
@ -61,15 +61,13 @@
|
|||
<string name="drawer_open">Apri il menù</string>
|
||||
<string name="drawer_close">Chiudi il menù</string>
|
||||
<string name="drawer_preferences">Preferenze del menu</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Ordina per contatore</string>
|
||||
<string name="drawer_feed_order_alphabetical">Ordina alfabeticamente</string>
|
||||
<string name="drawer_feed_order_last_update">Ordina per data di pubblicazione</string>
|
||||
<string name="drawer_feed_order_most_played">Ordina per numero di episodi riprodotti</string>
|
||||
<string name="feed_order_alphabetical">Ordina alfabeticamente</string>
|
||||
<string name="feed_order_last_update">Ordina per data di pubblicazione</string>
|
||||
<string name="feed_order_most_played">Ordina per numero di episodi riprodotti</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Numero di episodi non riprodotti</string>
|
||||
<string name="drawer_feed_counter_downloaded">Numero di episodi scaricati</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Numero di episodi scaricati e non riprodotti</string>
|
||||
<string name="drawer_feed_counter_none">Nessuno</string>
|
||||
<string name="feed_order_unplayed_count">Numero di episodi non riprodotti</string>
|
||||
<string name="feed_counter_downloaded">Numero di episodi scaricati</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Numero di episodi scaricati e non riprodotti</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nessuna applicazione compatibile trovata</string>
|
||||
<string name="export_logs_menu_title">Esporta registri dettagliati</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">פתיחת תפריט</string>
|
||||
<string name="drawer_close">סגירת תפריט</string>
|
||||
<string name="drawer_preferences">העדפות מגירה</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">מיון לפי מונה</string>
|
||||
<string name="drawer_feed_order_alphabetical">מיון בסדר אלפביתי</string>
|
||||
<string name="drawer_feed_order_last_update">מיון לפי תאריך פרסום</string>
|
||||
<string name="drawer_feed_order_most_played">מיון לפי מספר פרקים שהושמעו </string>
|
||||
<string name="feed_order_alphabetical">מיון בסדר אלפביתי</string>
|
||||
<string name="feed_order_last_update">מיון לפי תאריך פרסום</string>
|
||||
<string name="feed_order_most_played">מיון לפי מספר פרקים שהושמעו </string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">מספר פרקים שעוד לא התנגנו</string>
|
||||
<string name="drawer_feed_counter_downloaded">מספר פרקים שהתקבלו</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">מספר הפרקים שירדו אבל לא נוגנו</string>
|
||||
<string name="drawer_feed_counter_none">ללא</string>
|
||||
<string name="feed_order_unplayed_count">מספר פרקים שעוד לא התנגנו</string>
|
||||
<string name="feed_counter_downloaded">מספר פרקים שהתקבלו</string>
|
||||
<string name="feed_counter_downloaded_unplayed">מספר הפרקים שירדו אבל לא נוגנו</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">לא נמצאו יישומונים תואמים</string>
|
||||
<string name="export_logs_menu_title">ייצוא יומנים מפורטים</string>
|
||||
|
|
|
@ -44,15 +44,13 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">メニューを開く</string>
|
||||
<string name="drawer_close">メニューを閉じる</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">カウンターで並べ替え</string>
|
||||
<string name="drawer_feed_order_alphabetical">アルファベット順で並べ替え</string>
|
||||
<string name="drawer_feed_order_last_update">公開日で並べ替え</string>
|
||||
<string name="drawer_feed_order_most_played">再生したエピソードの数で並べ替え</string>
|
||||
<string name="feed_order_alphabetical">アルファベット順で並べ替え</string>
|
||||
<string name="feed_order_last_update">公開日で並べ替え</string>
|
||||
<string name="feed_order_most_played">再生したエピソードの数で並べ替え</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">未再生のエピソードの数</string>
|
||||
<string name="drawer_feed_counter_downloaded">ダウンロード済のエピソードの数</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">ダウンロード済と未再生のエピソードの数</string>
|
||||
<string name="drawer_feed_counter_none">なし</string>
|
||||
<string name="feed_order_unplayed_count">未再生のエピソードの数</string>
|
||||
<string name="feed_counter_downloaded">ダウンロード済のエピソードの数</string>
|
||||
<string name="feed_counter_downloaded_unplayed">ダウンロード済と未再生のエピソードの数</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">互換性のあるアプリが見つかりません</string>
|
||||
<string name="export_logs_menu_title">詳細ログを出力する</string>
|
||||
|
|
|
@ -55,15 +55,13 @@
|
|||
<string name="drawer_open">메뉴 열기</string>
|
||||
<string name="drawer_close">메뉴 닫기</string>
|
||||
<string name="drawer_preferences">드로어 기본 설정</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">카운터로 정렬</string>
|
||||
<string name="drawer_feed_order_alphabetical">사전 순서로 정렬</string>
|
||||
<string name="drawer_feed_order_last_update">공개 날짜 순서대로 정렬</string>
|
||||
<string name="drawer_feed_order_most_played">재생한 에피소드 개수에 따라 정렬</string>
|
||||
<string name="feed_order_alphabetical">사전 순서로 정렬</string>
|
||||
<string name="feed_order_last_update">공개 날짜 순서대로 정렬</string>
|
||||
<string name="feed_order_most_played">재생한 에피소드 개수에 따라 정렬</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">재생하지 않은 에피소드 수</string>
|
||||
<string name="drawer_feed_counter_downloaded">다운로드한 에피소드 수</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">다운로드 개수 및 재생하지 않은 에피소드</string>
|
||||
<string name="drawer_feed_counter_none">없음</string>
|
||||
<string name="feed_order_unplayed_count">재생하지 않은 에피소드 수</string>
|
||||
<string name="feed_counter_downloaded">다운로드한 에피소드 수</string>
|
||||
<string name="feed_counter_downloaded_unplayed">다운로드 개수 및 재생하지 않은 에피소드</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">호환되는 앱이 없습니다</string>
|
||||
<string name="export_logs_menu_title">자세한 기록 내보내기</string>
|
||||
|
|
|
@ -36,13 +36,11 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">Atverti meniu</string>
|
||||
<string name="drawer_close">Užverti meniu</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Rikiuoti pagal skaitiklio reikšmę</string>
|
||||
<string name="drawer_feed_order_alphabetical">Rikiuoti pagal abėcėlę</string>
|
||||
<string name="drawer_feed_order_last_update">Rikiuoti pagal publikavimo datą</string>
|
||||
<string name="drawer_feed_order_most_played">Rikiuoti pagal perklausytų epizodų skaičių</string>
|
||||
<string name="drawer_feed_order_unplayed">Neperklausytų epizodų skaičius</string>
|
||||
<string name="drawer_feed_counter_downloaded">Atsisiųstų epizodų skaičius</string>
|
||||
<string name="drawer_feed_counter_none">Nieko</string>
|
||||
<string name="feed_order_alphabetical">Rikiuoti pagal abėcėlę</string>
|
||||
<string name="feed_order_last_update">Rikiuoti pagal publikavimo datą</string>
|
||||
<string name="feed_order_most_played">Rikiuoti pagal perklausytų epizodų skaičių</string>
|
||||
<string name="feed_order_unplayed_count">Neperklausytų epizodų skaičius</string>
|
||||
<string name="feed_counter_downloaded">Atsisiųstų epizodų skaičius</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nerasta suderinamų programėlių</string>
|
||||
<string name="export_logs_menu_title">Eksportuoti išsamų žurnalą</string>
|
||||
|
|
|
@ -55,15 +55,13 @@
|
|||
<string name="drawer_open">Åpne menyen</string>
|
||||
<string name="drawer_close">Lukk menyen</string>
|
||||
<string name="drawer_preferences">Skuff-innstillinger</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sorter på teller</string>
|
||||
<string name="drawer_feed_order_alphabetical">Sorter alfabetisk</string>
|
||||
<string name="drawer_feed_order_last_update">Sorter etter utgivelsesdato</string>
|
||||
<string name="drawer_feed_order_most_played">Sorter etter antall avspilte episoder</string>
|
||||
<string name="feed_order_alphabetical">Sorter alfabetisk</string>
|
||||
<string name="feed_order_last_update">Sorter etter utgivelsesdato</string>
|
||||
<string name="feed_order_most_played">Sorter etter antall avspilte episoder</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Antall uavspilte episoder</string>
|
||||
<string name="drawer_feed_counter_downloaded">Antall nedlastede episoder</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Antall of nedlastede og uavspilte episoder</string>
|
||||
<string name="drawer_feed_counter_none">Ingen</string>
|
||||
<string name="feed_order_unplayed_count">Antall uavspilte episoder</string>
|
||||
<string name="feed_counter_downloaded">Antall nedlastede episoder</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Antall of nedlastede og uavspilte episoder</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Fant ingen kompatible apper</string>
|
||||
<string name="export_logs_menu_title">Eksport detaljert logfiler</string>
|
||||
|
|
|
@ -61,15 +61,13 @@
|
|||
<string name="drawer_open">Menu openen</string>
|
||||
<string name="drawer_close">Menu sluiten</string>
|
||||
<string name="drawer_preferences">Menu instellen</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Op ingestelde teller</string>
|
||||
<string name="drawer_feed_order_alphabetical">Op alfabetische volgorde</string>
|
||||
<string name="drawer_feed_order_last_update">Op verschijningsdatum</string>
|
||||
<string name="drawer_feed_order_most_played">Op aantal afgespeelde afleveringen</string>
|
||||
<string name="feed_order_alphabetical">Op alfabetische volgorde</string>
|
||||
<string name="feed_order_last_update">Op verschijningsdatum</string>
|
||||
<string name="feed_order_most_played">Op aantal afgespeelde afleveringen</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Aantal niet afgespeelde afleveringen</string>
|
||||
<string name="drawer_feed_counter_downloaded">Aantal gedownloade afleveringen</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Aantal gedownloade, onbeluisterde afleveringen</string>
|
||||
<string name="drawer_feed_counter_none">Geen</string>
|
||||
<string name="feed_order_unplayed_count">Aantal niet afgespeelde afleveringen</string>
|
||||
<string name="feed_counter_downloaded">Aantal gedownloade afleveringen</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Aantal gedownloade, onbeluisterde afleveringen</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Geen compatibele apps aangetroffen</string>
|
||||
<string name="export_logs_menu_title">Uitgebreide logboeken exporteren</string>
|
||||
|
|
|
@ -59,15 +59,13 @@
|
|||
<string name="drawer_open">Otwórz menu</string>
|
||||
<string name="drawer_close">Zamknij menu</string>
|
||||
<string name="drawer_preferences">Ustawienia panelu nawigacyjnego</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sortuj wg licznika</string>
|
||||
<string name="drawer_feed_order_alphabetical">Sortuj alfabetycznie</string>
|
||||
<string name="drawer_feed_order_last_update">Sortuj wg daty publikacji</string>
|
||||
<string name="drawer_feed_order_most_played">Sortuj wg liczby odtworzonych odcinków</string>
|
||||
<string name="feed_order_alphabetical">Sortuj alfabetycznie</string>
|
||||
<string name="feed_order_last_update">Sortuj wg daty publikacji</string>
|
||||
<string name="feed_order_most_played">Sortuj wg liczby odtworzonych odcinków</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Liczba nieodtworzonych odcinków</string>
|
||||
<string name="drawer_feed_counter_downloaded">Liczba pobranych odcinków</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Liczba pobranych i nieodtworzonych odcinków</string>
|
||||
<string name="drawer_feed_counter_none">Brak</string>
|
||||
<string name="feed_order_unplayed_count">Liczba nieodtworzonych odcinków</string>
|
||||
<string name="feed_counter_downloaded">Liczba pobranych odcinków</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Liczba pobranych i nieodtworzonych odcinków</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nie znaleziono kompatybilnych aplikacji</string>
|
||||
<string name="export_logs_menu_title">Eksportuj szczegółowe logi</string>
|
||||
|
|
|
@ -58,15 +58,13 @@
|
|||
<string name="drawer_open">Abrir menu</string>
|
||||
<string name="drawer_close">Fechar menu</string>
|
||||
<string name="drawer_preferences">Menu de navegação</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Ordenar por contador</string>
|
||||
<string name="drawer_feed_order_alphabetical">Ordenar alfabeticamente</string>
|
||||
<string name="drawer_feed_order_last_update">Ordenar por data de publicação</string>
|
||||
<string name="drawer_feed_order_most_played">Ordenar pelo número de episódios reproduzidos</string>
|
||||
<string name="feed_order_alphabetical">Ordenar alfabeticamente</string>
|
||||
<string name="feed_order_last_update">Ordenar por data de publicação</string>
|
||||
<string name="feed_order_most_played">Ordenar pelo número de episódios reproduzidos</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Número de episódios não reproduzidos</string>
|
||||
<string name="drawer_feed_counter_downloaded">Número de episódios baixados</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Número de episódios baixados e não reproduzidos</string>
|
||||
<string name="drawer_feed_counter_none">Nenhum</string>
|
||||
<string name="feed_order_unplayed_count">Número de episódios não reproduzidos</string>
|
||||
<string name="feed_counter_downloaded">Número de episódios baixados</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Número de episódios baixados e não reproduzidos</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nenhum aplicativo compatível encontrado</string>
|
||||
<string name="export_logs_menu_title">Exportar relatórios detalhados</string>
|
||||
|
|
|
@ -60,15 +60,13 @@
|
|||
<string name="drawer_open">Abrir menu</string>
|
||||
<string name="drawer_close">Fechar menu</string>
|
||||
<string name="drawer_preferences">Preferências do menu</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Ordenar por contador</string>
|
||||
<string name="drawer_feed_order_alphabetical">Ordenar alfabeticamente</string>
|
||||
<string name="drawer_feed_order_last_update">Ordenar por data de publicação</string>
|
||||
<string name="drawer_feed_order_most_played">Ordenar por número de episódios reproduzidos</string>
|
||||
<string name="feed_order_alphabetical">Ordenar alfabeticamente</string>
|
||||
<string name="feed_order_last_update">Ordenar por data de publicação</string>
|
||||
<string name="feed_order_most_played">Ordenar por número de episódios reproduzidos</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Número de episódios não reproduzidos</string>
|
||||
<string name="drawer_feed_counter_downloaded">Número de episódios descarregados</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Número de episódios descarregados e não reproduzidos</string>
|
||||
<string name="drawer_feed_counter_none">Nenhum</string>
|
||||
<string name="feed_order_unplayed_count">Número de episódios não reproduzidos</string>
|
||||
<string name="feed_counter_downloaded">Número de episódios descarregados</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Número de episódios descarregados e não reproduzidos</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Não existem aplicações compatíveis</string>
|
||||
<string name="export_logs_menu_title">Exportar registos detalhados</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Deschide meniul</string>
|
||||
<string name="drawer_close">Închide meniul</string>
|
||||
<string name="drawer_preferences">Preferințe Sertar</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sortează după număr</string>
|
||||
<string name="drawer_feed_order_alphabetical">Sortează alfabetic</string>
|
||||
<string name="drawer_feed_order_last_update">Sortează după data publicării</string>
|
||||
<string name="drawer_feed_order_most_played">Sortează după numărul de episoade urmărite</string>
|
||||
<string name="feed_order_alphabetical">Sortează alfabetic</string>
|
||||
<string name="feed_order_last_update">Sortează după data publicării</string>
|
||||
<string name="feed_order_most_played">Sortează după numărul de episoade urmărite</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Numărul de episoade neredate</string>
|
||||
<string name="drawer_feed_counter_downloaded">Numărul de episoade descărcate</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Numărul de episoade descărcate și neredate</string>
|
||||
<string name="drawer_feed_counter_none">Niciunul</string>
|
||||
<string name="feed_order_unplayed_count">Numărul de episoade neredate</string>
|
||||
<string name="feed_counter_downloaded">Numărul de episoade descărcate</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Numărul de episoade descărcate și neredate</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Nicio aplicație compatibilă nu a fost găsită</string>
|
||||
<string name="export_logs_menu_title">Exportă log-uri detaliate</string>
|
||||
|
|
|
@ -55,15 +55,13 @@
|
|||
<string name="drawer_open">Открыть меню</string>
|
||||
<string name="drawer_close">Закрыть меню</string>
|
||||
<string name="drawer_preferences">Настройка бокового меню</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">По количеству</string>
|
||||
<string name="drawer_feed_order_alphabetical">По алфавиту</string>
|
||||
<string name="drawer_feed_order_last_update">По дате выхода</string>
|
||||
<string name="drawer_feed_order_most_played">По количеству прослушанных</string>
|
||||
<string name="feed_order_alphabetical">По алфавиту</string>
|
||||
<string name="feed_order_last_update">По дате выхода</string>
|
||||
<string name="feed_order_most_played">По количеству прослушанных</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Количество непрослушанных выпусков</string>
|
||||
<string name="drawer_feed_counter_downloaded">Количество загруженных выпусков</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Количество загруженных и непрослушанных выпусков</string>
|
||||
<string name="drawer_feed_counter_none">Ничего</string>
|
||||
<string name="feed_order_unplayed_count">Количество непрослушанных выпусков</string>
|
||||
<string name="feed_counter_downloaded">Количество загруженных выпусков</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Количество загруженных и непрослушанных выпусков</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Совместимых приложений не найдено</string>
|
||||
<string name="export_logs_menu_title">Экспортировать подробные журналы</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Otvoriť menu</string>
|
||||
<string name="drawer_close">Zatvoriť menu</string>
|
||||
<string name="drawer_preferences">Nastavenie navigačného panela</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Usporiadať podľa počítadla</string>
|
||||
<string name="drawer_feed_order_alphabetical">Usporiadať abecedne</string>
|
||||
<string name="drawer_feed_order_last_update">Usporiadať podľa dátumu zverejnenia</string>
|
||||
<string name="drawer_feed_order_most_played">Usporiadať podľa počtu prehraných epizód</string>
|
||||
<string name="feed_order_alphabetical">Usporiadať abecedne</string>
|
||||
<string name="feed_order_last_update">Usporiadať podľa dátumu zverejnenia</string>
|
||||
<string name="feed_order_most_played">Usporiadať podľa počtu prehraných epizód</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Počet neprehraných epizód</string>
|
||||
<string name="drawer_feed_counter_downloaded">Počet stiahnutých epizód</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Počet stiahnutých a neprehratých epizód</string>
|
||||
<string name="drawer_feed_counter_none">Žiadne</string>
|
||||
<string name="feed_order_unplayed_count">Počet neprehraných epizód</string>
|
||||
<string name="feed_counter_downloaded">Počet stiahnutých epizód</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Počet stiahnutých a neprehratých epizód</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Žiadne kompatibilné aplikácie</string>
|
||||
<string name="export_logs_menu_title">Exportovať podrobné záznamy</string>
|
||||
|
|
|
@ -35,13 +35,11 @@
|
|||
<!--Main activity-->
|
||||
<string name="drawer_open">Odpri meni</string>
|
||||
<string name="drawer_close">Zapri meni</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Razvrsti po števcu</string>
|
||||
<string name="drawer_feed_order_alphabetical">Razvrsti po abecedi</string>
|
||||
<string name="drawer_feed_order_last_update">Razvrsti po datumu objave</string>
|
||||
<string name="drawer_feed_order_most_played">Razvrsti po številu predvajanih epizod</string>
|
||||
<string name="drawer_feed_order_unplayed">Število nepredvajanih epizod</string>
|
||||
<string name="drawer_feed_counter_downloaded">Število prenesenih epizod</string>
|
||||
<string name="drawer_feed_counter_none">Nič</string>
|
||||
<string name="feed_order_alphabetical">Razvrsti po abecedi</string>
|
||||
<string name="feed_order_last_update">Razvrsti po datumu objave</string>
|
||||
<string name="feed_order_most_played">Razvrsti po številu predvajanih epizod</string>
|
||||
<string name="feed_order_unplayed_count">Število nepredvajanih epizod</string>
|
||||
<string name="feed_counter_downloaded">Število prenesenih epizod</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Ni bilo najdenih združljivih aplikacij</string>
|
||||
<string name="export_logs_menu_title">Izvozi podrobne dnevnike</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Öppna meny</string>
|
||||
<string name="drawer_close">Stäng meny</string>
|
||||
<string name="drawer_preferences">Menyinställningar</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sortera efter antal ospelade</string>
|
||||
<string name="drawer_feed_order_alphabetical">Sortera alfabetiskt</string>
|
||||
<string name="drawer_feed_order_last_update">Sortera efter publiceringsdatum</string>
|
||||
<string name="drawer_feed_order_most_played">Sortera efter antal spelade episoder</string>
|
||||
<string name="feed_order_alphabetical">Sortera alfabetiskt</string>
|
||||
<string name="feed_order_last_update">Sortera efter publiceringsdatum</string>
|
||||
<string name="feed_order_most_played">Sortera efter antal spelade episoder</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Antal ospelade episoder</string>
|
||||
<string name="drawer_feed_counter_downloaded">Antal nedladdade episoder</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Antal nedladdade och ospelade avsnitt</string>
|
||||
<string name="drawer_feed_counter_none">Inga</string>
|
||||
<string name="feed_order_unplayed_count">Antal ospelade episoder</string>
|
||||
<string name="feed_counter_downloaded">Antal nedladdade episoder</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Antal nedladdade och ospelade avsnitt</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Hittade inga kompatibla appar</string>
|
||||
<string name="export_logs_menu_title">Exportera detaljerade loggar</string>
|
||||
|
|
|
@ -60,15 +60,13 @@
|
|||
<string name="drawer_open">Münüyü aç</string>
|
||||
<string name="drawer_close">Menüyü kapat</string>
|
||||
<string name="drawer_preferences">İzni reddettiniz.</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Sayaca göre sırala</string>
|
||||
<string name="drawer_feed_order_alphabetical">Alfabetik olarak sırala</string>
|
||||
<string name="drawer_feed_order_last_update">Yayınlanma tarihine göre sırala</string>
|
||||
<string name="drawer_feed_order_most_played">Oynatılan bölüm sayısına göre sırala</string>
|
||||
<string name="feed_order_alphabetical">Alfabetik olarak sırala</string>
|
||||
<string name="feed_order_last_update">Yayınlanma tarihine göre sırala</string>
|
||||
<string name="feed_order_most_played">Oynatılan bölüm sayısına göre sırala</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Çalınmamış bölümlerin sayısı</string>
|
||||
<string name="drawer_feed_counter_downloaded">İndirilen bölümlerin sayısı</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">İndirilen ve oynatılmamış bölümlerin sayısı</string>
|
||||
<string name="drawer_feed_counter_none">Hiçbiri</string>
|
||||
<string name="feed_order_unplayed_count">Çalınmamış bölümlerin sayısı</string>
|
||||
<string name="feed_counter_downloaded">İndirilen bölümlerin sayısı</string>
|
||||
<string name="feed_counter_downloaded_unplayed">İndirilen ve oynatılmamış bölümlerin sayısı</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Uyumlu uygulama bulunamadı</string>
|
||||
<string name="export_logs_menu_title">Ayrıntılı günlükleri dışa aktar</string>
|
||||
|
|
|
@ -57,15 +57,13 @@
|
|||
<string name="drawer_open">Показати меню</string>
|
||||
<string name="drawer_close">Сховати меню</string>
|
||||
<string name="drawer_preferences">Налаштування шторки</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Сортувати за лічильником</string>
|
||||
<string name="drawer_feed_order_alphabetical">Сортувати за абеткою</string>
|
||||
<string name="drawer_feed_order_last_update">Сортувати за датою публікації</string>
|
||||
<string name="drawer_feed_order_most_played">Сортувати за кількістю прослуханих епізодів</string>
|
||||
<string name="feed_order_alphabetical">Сортувати за абеткою</string>
|
||||
<string name="feed_order_last_update">Сортувати за датою публікації</string>
|
||||
<string name="feed_order_most_played">Сортувати за кількістю прослуханих епізодів</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Кількість непрослуханих епізодів</string>
|
||||
<string name="drawer_feed_counter_downloaded">Кількість завантажених епізодів</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Кількість завантажених але не прослуханих епізодів</string>
|
||||
<string name="drawer_feed_counter_none">Немає</string>
|
||||
<string name="feed_order_unplayed_count">Кількість непрослуханих епізодів</string>
|
||||
<string name="feed_counter_downloaded">Кількість завантажених епізодів</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Кількість завантажених але не прослуханих епізодів</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">Сумісних програм не знайдено</string>
|
||||
<string name="export_logs_menu_title">Експорт детальних журналів</string>
|
||||
|
|
|
@ -61,15 +61,13 @@
|
|||
<string name="drawer_open">打开菜单</string>
|
||||
<string name="drawer_close">关闭菜单</string>
|
||||
<string name="drawer_preferences">抽屉选项</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">按数量排序</string>
|
||||
<string name="drawer_feed_order_alphabetical">按名称排序</string>
|
||||
<string name="drawer_feed_order_last_update">按出版日期排序</string>
|
||||
<string name="drawer_feed_order_most_played">根据已播放节目的数量排序</string>
|
||||
<string name="feed_order_alphabetical">按名称排序</string>
|
||||
<string name="feed_order_last_update">按出版日期排序</string>
|
||||
<string name="feed_order_most_played">根据已播放节目的数量排序</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">未播曲目数</string>
|
||||
<string name="drawer_feed_counter_downloaded">已下载节目数</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">已下载但未播放的节目数</string>
|
||||
<string name="drawer_feed_counter_none">无</string>
|
||||
<string name="feed_order_unplayed_count">未播曲目数</string>
|
||||
<string name="feed_counter_downloaded">已下载节目数</string>
|
||||
<string name="feed_counter_downloaded_unplayed">已下载但未播放的节目数</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">没有找到兼容的应用程序</string>
|
||||
<string name="export_logs_menu_title">导出详细日志</string>
|
||||
|
|
|
@ -34,13 +34,11 @@
|
|||
</string>
|
||||
<string name="drawer_open">打開選單</string>
|
||||
<string name="drawer_close">關閉選單</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">按計數器排序</string>
|
||||
<string name="drawer_feed_order_alphabetical">按字母排序</string>
|
||||
<string name="drawer_feed_order_last_update">按發布日期排序</string>
|
||||
<string name="drawer_feed_order_most_played">按已播放的集數排序</string>
|
||||
<string name="drawer_feed_order_unplayed">未播放集數</string>
|
||||
<string name="drawer_feed_counter_downloaded">已下載集數</string>
|
||||
<string name="drawer_feed_counter_none">沒有</string>
|
||||
<string name="feed_order_alphabetical">按字母排序</string>
|
||||
<string name="feed_order_last_update">按發布日期排序</string>
|
||||
<string name="feed_order_most_played">按已播放的集數排序</string>
|
||||
<string name="feed_order_unplayed_count">未播放集數</string>
|
||||
<string name="feed_counter_downloaded">已下載集數</string>
|
||||
<!--Bug report activity-->
|
||||
<string name="log_file_share_exception">找不到相容的 App</string>
|
||||
<string name="export_logs_menu_title">匯出詳細記錄</string>
|
||||
|
|
|
@ -188,38 +188,25 @@
|
|||
<item>3</item>
|
||||
</string-array>
|
||||
|
||||
<string-array name="nav_drawer_feed_order_options">
|
||||
<item>@string/drawer_feed_order_unplayed</item>
|
||||
<item>@string/drawer_feed_order_alphabetical</item>
|
||||
<item>@string/drawer_feed_order_last_update</item>
|
||||
<item>@string/drawer_feed_order_last_unread_update</item>
|
||||
<item>@string/drawer_feed_order_most_played</item>
|
||||
<item>@string/drawer_feed_counter_downloaded</item>
|
||||
<item>@string/drawer_feed_counter_downloaded_unplayed</item>
|
||||
<item>@string/drawer_feed_order_new_episodes</item>
|
||||
</string-array>
|
||||
<string-array name="nav_drawer_feed_order_values">
|
||||
<item>0</item>
|
||||
<item>1</item>
|
||||
<item>2</item>
|
||||
<item>3</item>
|
||||
<item>4</item>
|
||||
<item>5</item>
|
||||
<item>6</item>
|
||||
<item>7</item>
|
||||
</string-array>
|
||||
|
||||
<!-- <string-array name="nav_drawer_feed_counter_options">-->
|
||||
<!-- <item>@string/drawer_feed_order_unplayed</item>-->
|
||||
<!-- <item>@string/drawer_feed_counter_downloaded</item>-->
|
||||
<!-- <item>@string/drawer_feed_counter_downloaded_unplayed</item>-->
|
||||
<!-- <item>@string/drawer_feed_counter_none</item>-->
|
||||
<!-- <string-array name="nav_drawer_feed_order_options">-->
|
||||
<!-- <item>@string/feed_order_unplayed_count</item>-->
|
||||
<!-- <item>@string/feed_order_alphabetical</item>-->
|
||||
<!-- <item>@string/feed_order_last_update</item>-->
|
||||
<!-- <item>@string/feed_order_last_unread_update</item>-->
|
||||
<!-- <item>@string/feed_order_most_played</item>-->
|
||||
<!-- <item>@string/feed_counter_downloaded</item>-->
|
||||
<!-- <item>@string/feed_counter_downloaded_unplayed</item>-->
|
||||
<!-- <item>@string/feed_order_new_episodes</item>-->
|
||||
<!-- </string-array>-->
|
||||
<!-- <string-array name="nav_drawer_feed_counter_values">-->
|
||||
<!-- <string-array name="nav_drawer_feed_order_values">-->
|
||||
<!-- <item>0</item>-->
|
||||
<!-- <item>1</item>-->
|
||||
<!-- <item>2</item>-->
|
||||
<!-- <item>3</item>-->
|
||||
<!-- <item>4</item>-->
|
||||
<!-- <item>5</item>-->
|
||||
<!-- <item>3</item>-->
|
||||
<!-- <item>6</item>-->
|
||||
<!-- <item>7</item>-->
|
||||
<!-- </string-array>-->
|
||||
|
||||
<string-array name="full_notification_buttons_options">
|
||||
|
|
|
@ -78,17 +78,15 @@
|
|||
<string name="drawer_open">Open menu</string>
|
||||
<string name="drawer_close">Close menu</string>
|
||||
<string name="drawer_preferences">Drawer preferences</string>
|
||||
<string name="drawer_feed_order_unplayed_episodes">Counter</string>
|
||||
<string name="drawer_feed_order_alphabetical">Title</string>
|
||||
<string name="drawer_feed_order_last_update">Publication date</string>
|
||||
<string name="drawer_feed_order_last_unread_update">Unread publication date</string>
|
||||
<string name="drawer_feed_order_most_played">Number of played episodes</string>
|
||||
<string name="drawer_feed_order_new_episodes">Number of new episodes</string>
|
||||
|
||||
<string name="drawer_feed_order_unplayed">Number of unplayed episodes</string>
|
||||
<string name="drawer_feed_counter_downloaded">Number of downloaded episodes</string>
|
||||
<string name="drawer_feed_counter_downloaded_unplayed">Number of downloaded and unplayed episodes</string>
|
||||
<string name="drawer_feed_counter_none">None</string>
|
||||
<string name="feed_order_alphabetical">Title</string>
|
||||
<string name="feed_order_last_update">Publish date</string>
|
||||
<string name="feed_order_last_unread_update">Unplayed publish date</string>
|
||||
<string name="feed_order_most_played">Played count</string>
|
||||
<string name="feed_order_new_episodes">New count</string>
|
||||
<string name="feed_order_unplayed_count">Unplayed count</string>
|
||||
<string name="feed_counter_downloaded">Download count</string>
|
||||
<string name="feed_counter_downloaded_unplayed">Unplayed download count</string>
|
||||
|
||||
<!-- Bug report activity -->
|
||||
<string name="log_file_share_exception">No compatible apps found</string>
|
||||
|
|
|
@ -2,7 +2,7 @@ package ac.mdiq.podcini.feed
|
|||
|
||||
import ac.mdiq.podcini.feed.FeedMother.anyFeed
|
||||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import junit.framework.TestCase.assertEquals
|
||||
import org.junit.Assert
|
||||
import org.junit.Before
|
||||
|
@ -67,8 +67,8 @@ class FeedTest {
|
|||
@Test
|
||||
@Throws(Exception::class)
|
||||
fun testSetSortOrder_OnlyIntraFeedSortAllowed() {
|
||||
for (sortOrder in SortOrder.entries) {
|
||||
if (sortOrder.scope == SortOrder.Scope.INTRA_FEED) {
|
||||
for (sortOrder in EpisodeSortOrder.entries) {
|
||||
if (sortOrder.scope == EpisodeSortOrder.Scope.INTRA_FEED) {
|
||||
original!!.sortOrder = sortOrder // should be okay
|
||||
} else {
|
||||
try {
|
||||
|
|
|
@ -10,7 +10,7 @@ import ac.mdiq.podcini.storage.database.Feeds.getFeedListDownloadUrls
|
|||
import ac.mdiq.podcini.storage.database.Queues.getInQueueEpisodeIds
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeFilter
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import ac.mdiq.podcini.ui.fragment.HistoryFragment.Companion.getHistory
|
||||
import ac.mdiq.podcini.ui.fragment.HistoryFragment.Companion.getNumberOfCompleted
|
||||
import ac.mdiq.podcini.ui.fragment.NavDrawerFragment.Companion.getDatasetStats
|
||||
|
@ -223,7 +223,7 @@ class DbReaderTest {
|
|||
fun testGetDownloadedItems() {
|
||||
val numItems = 10
|
||||
val downloaded = saveDownloadedItems(numItems)
|
||||
val downloadedSaved = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), SortOrder.DATE_NEW_OLD)
|
||||
val downloadedSaved = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.DOWNLOADED), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
Assert.assertNotNull(downloadedSaved)
|
||||
Assert.assertEquals(downloaded.size.toLong(), downloadedSaved.size.toLong())
|
||||
for (item in downloadedSaved) {
|
||||
|
@ -266,7 +266,7 @@ class DbReaderTest {
|
|||
for (i in newItems.indices) {
|
||||
unreadIds[i] = newItems[i].id
|
||||
}
|
||||
val newItemsSaved = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.NEW), SortOrder.DATE_NEW_OLD)
|
||||
val newItemsSaved = getEpisodes(0, Int.MAX_VALUE, EpisodeFilter(EpisodeFilter.NEW), EpisodeSortOrder.DATE_NEW_OLD)
|
||||
Assert.assertNotNull(newItemsSaved)
|
||||
Assert.assertEquals(newItemsSaved.size.toLong(), newItems.size.toLong())
|
||||
for (feedItem in newItemsSaved) {
|
||||
|
|
|
@ -4,7 +4,7 @@ import ac.mdiq.podcini.util.sorting.EpisodesPermutors.getPermutor
|
|||
import ac.mdiq.podcini.storage.model.Feed
|
||||
import ac.mdiq.podcini.storage.model.Episode
|
||||
import ac.mdiq.podcini.storage.model.EpisodeMedia
|
||||
import ac.mdiq.podcini.storage.model.SortOrder
|
||||
import ac.mdiq.podcini.storage.model.EpisodeSortOrder
|
||||
import org.junit.Assert
|
||||
import org.junit.Test
|
||||
import java.util.*
|
||||
|
@ -15,7 +15,7 @@ import java.util.*
|
|||
class EpisodePermutorsTest {
|
||||
@Test
|
||||
fun testEnsureNonNullPermutors() {
|
||||
for (sortOrder in SortOrder.entries) {
|
||||
for (sortOrder in EpisodeSortOrder.entries) {
|
||||
Assert.assertNotNull("The permutor for SortOrder $sortOrder is unexpectedly null",
|
||||
getPermutor(sortOrder))
|
||||
}
|
||||
|
@ -23,7 +23,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_EPISODE_TITLE_ASC() {
|
||||
val permutor = getPermutor(SortOrder.EPISODE_TITLE_A_Z)
|
||||
val permutor = getPermutor(EpisodeSortOrder.EPISODE_TITLE_A_Z)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -33,7 +33,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_EPISODE_TITLE_ASC_NullTitle() {
|
||||
val permutor = getPermutor(SortOrder.EPISODE_TITLE_A_Z)
|
||||
val permutor = getPermutor(EpisodeSortOrder.EPISODE_TITLE_A_Z)
|
||||
|
||||
val itemList = testList.toMutableList()
|
||||
itemList[2].title = (null)
|
||||
|
@ -45,7 +45,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_EPISODE_TITLE_DESC() {
|
||||
val permutor = getPermutor(SortOrder.EPISODE_TITLE_Z_A)
|
||||
val permutor = getPermutor(EpisodeSortOrder.EPISODE_TITLE_Z_A)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -55,7 +55,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_DATE_ASC() {
|
||||
val permutor = getPermutor(SortOrder.DATE_OLD_NEW)
|
||||
val permutor = getPermutor(EpisodeSortOrder.DATE_OLD_NEW)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -65,7 +65,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_DATE_ASC_NulPubDatel() {
|
||||
val permutor = getPermutor(SortOrder.DATE_OLD_NEW)
|
||||
val permutor = getPermutor(EpisodeSortOrder.DATE_OLD_NEW)
|
||||
|
||||
val itemList = testList
|
||||
itemList[2] // itemId 2
|
||||
|
@ -77,7 +77,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_DATE_DESC() {
|
||||
val permutor = getPermutor(SortOrder.DATE_NEW_OLD)
|
||||
val permutor = getPermutor(EpisodeSortOrder.DATE_NEW_OLD)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -87,7 +87,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_DURATION_ASC() {
|
||||
val permutor = getPermutor(SortOrder.DURATION_SHORT_LONG)
|
||||
val permutor = getPermutor(EpisodeSortOrder.DURATION_SHORT_LONG)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -97,7 +97,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_DURATION_DESC() {
|
||||
val permutor = getPermutor(SortOrder.DURATION_LONG_SHORT)
|
||||
val permutor = getPermutor(EpisodeSortOrder.DURATION_LONG_SHORT)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -107,7 +107,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_size_asc() {
|
||||
val permutor = getPermutor(SortOrder.SIZE_SMALL_LARGE)
|
||||
val permutor = getPermutor(EpisodeSortOrder.SIZE_SMALL_LARGE)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -117,7 +117,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_size_desc() {
|
||||
val permutor = getPermutor(SortOrder.SIZE_LARGE_SMALL)
|
||||
val permutor = getPermutor(EpisodeSortOrder.SIZE_LARGE_SMALL)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -127,7 +127,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_DURATION_DESC_NullMedia() {
|
||||
val permutor = getPermutor(SortOrder.DURATION_LONG_SHORT)
|
||||
val permutor = getPermutor(EpisodeSortOrder.DURATION_LONG_SHORT)
|
||||
|
||||
val itemList = testList
|
||||
itemList[1] // itemId 3
|
||||
|
@ -139,7 +139,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_FEED_TITLE_ASC() {
|
||||
val permutor = getPermutor(SortOrder.FEED_TITLE_A_Z)
|
||||
val permutor = getPermutor(EpisodeSortOrder.FEED_TITLE_A_Z)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -149,7 +149,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_FEED_TITLE_DESC() {
|
||||
val permutor = getPermutor(SortOrder.FEED_TITLE_Z_A)
|
||||
val permutor = getPermutor(EpisodeSortOrder.FEED_TITLE_Z_A)
|
||||
|
||||
val itemList = testList
|
||||
Assert.assertTrue(checkIdOrder(itemList, 1, 3, 2)) // before sorting
|
||||
|
@ -159,7 +159,7 @@ class EpisodePermutorsTest {
|
|||
|
||||
@Test
|
||||
fun testPermutorForRule_FEED_TITLE_DESC_NullTitle() {
|
||||
val permutor = getPermutor(SortOrder.FEED_TITLE_Z_A)
|
||||
val permutor = getPermutor(EpisodeSortOrder.FEED_TITLE_Z_A)
|
||||
|
||||
val itemList = testList
|
||||
itemList[1].feed!!.title = (null)
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
## 6.0.7
|
||||
|
||||
* feeds sorting is bi-directional and in the same style as episodes sorting
|
||||
* feed order names changed in English (other languages need update)
|
||||
* date of new episode is highlighted in episodes list views
|
||||
* fixed issue of tags not being properly handled
|
||||
|
||||
## 6.0.6
|
||||
|
||||
* minor class re-structuring
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
|
||||
Version 6.0.7 brings several changes:
|
||||
|
||||
* feeds sorting is bi-directional and in the same style as episodes sorting
|
||||
* feed order names changed in English (other languages need update)
|
||||
* date of new episode is highlighted in episodes list views
|
||||
* fixed issue of tags not being properly handled
|
Loading…
Reference in New Issue