Skip to content

Commit a10dfde

Browse files
sentinelwebsentinelweb
authored andcommitted
#496 - auto paste for youtube playlist links
1 parent d4def7c commit a10dfde

File tree

2 files changed

+33
-9
lines changed

2 files changed

+33
-9
lines changed

app/src/main/java/uk/co/sentinelweb/cuer/app/ui/main/MainContract.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,7 @@ interface MainContract {
8484
castController = get(),
8585
linkScanner = get(),
8686
mediaOrchestrator = get(),
87+
playlistOrchestrator = get(),
8788
)
8889
}
8990
scoped {

app/src/main/java/uk/co/sentinelweb/cuer/app/ui/main/MainPresenter.kt

Lines changed: 32 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,20 @@ package uk.co.sentinelweb.cuer.app.ui.main
33
import uk.co.sentinelweb.cuer.app.backup.AutoBackupFileExporter
44
import uk.co.sentinelweb.cuer.app.orchestrator.MediaOrchestrator
55
import uk.co.sentinelweb.cuer.app.orchestrator.OrchestratorContract.Filter.PlatformIdListFilter
6-
import uk.co.sentinelweb.cuer.app.orchestrator.OrchestratorContract.Options
76
import uk.co.sentinelweb.cuer.app.orchestrator.OrchestratorContract.Source.LOCAL
7+
import uk.co.sentinelweb.cuer.app.orchestrator.PlaylistOrchestrator
8+
import uk.co.sentinelweb.cuer.app.orchestrator.flatOptions
89
import uk.co.sentinelweb.cuer.app.ui.cast.CastController
910
import uk.co.sentinelweb.cuer.app.ui.ytplayer.floating.FloatingPlayerContract
1011
import uk.co.sentinelweb.cuer.app.util.chromecast.listener.ChromecastContract
1112
import uk.co.sentinelweb.cuer.app.util.permission.NotificationPermissionCheckDialog
1213
import uk.co.sentinelweb.cuer.app.util.share.scan.LinkScanner
1314
import uk.co.sentinelweb.cuer.core.wrapper.LogWrapper
1415
import uk.co.sentinelweb.cuer.domain.MediaDomain
15-
import uk.co.sentinelweb.cuer.domain.ObjectTypeDomain
16+
import uk.co.sentinelweb.cuer.domain.ObjectTypeDomain.MEDIA
17+
import uk.co.sentinelweb.cuer.domain.ObjectTypeDomain.PLAYLIST
1618
import uk.co.sentinelweb.cuer.domain.PlatformDomain
19+
import uk.co.sentinelweb.cuer.domain.PlaylistDomain
1720

1821
class MainPresenter(
1922
private val view: MainContract.View,
@@ -27,6 +30,7 @@ class MainPresenter(
2730
private val castController: CastController,
2831
private val linkScanner: LinkScanner,
2932
private val mediaOrchestrator: MediaOrchestrator,
33+
private val playlistOrchestrator: PlaylistOrchestrator,
3034
) : MainContract.Presenter {
3135

3236
init {
@@ -84,12 +88,31 @@ class MainPresenter(
8488
override suspend fun checkClipboardUrl(primaryClip: String): String? =
8589
linkScanner
8690
.scan(primaryClip)
87-
?.takeIf { it.first == ObjectTypeDomain.MEDIA && (it.second as MediaDomain).platform == PlatformDomain.YOUTUBE }
88-
?.let { it.second as MediaDomain }
89-
?.takeIf {
90-
mediaOrchestrator.loadList(
91-
PlatformIdListFilter(listOf(it.platformId)), Options(LOCAL)
92-
).size == 0
91+
?.takeIf { listOf(MEDIA, PLAYLIST).contains(it.first) }
92+
?.let {
93+
when (it.first) {
94+
MEDIA -> {
95+
(it.second as MediaDomain)
96+
.takeIf { it.platform == PlatformDomain.YOUTUBE }
97+
?.platformId
98+
?.takeIf {
99+
mediaOrchestrator.loadList(
100+
PlatformIdListFilter(listOf(it)),
101+
LOCAL.flatOptions()
102+
).size == 0
103+
}
104+
?.let { primaryClip }
105+
}
106+
107+
PLAYLIST -> {
108+
(it.second as PlaylistDomain)
109+
.takeIf { it.platform == PlatformDomain.YOUTUBE }
110+
?.platformId
111+
?.takeIf { playlistOrchestrator.loadByPlatformId(it, LOCAL.flatOptions()) == null }
112+
?.let { primaryClip }
113+
}
114+
115+
else -> null
116+
}
93117
}
94-
?.url
95118
}

0 commit comments

Comments
 (0)