Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,5 @@ local.properties
/.tmp/
/tools/
/.kotlin/
demo
.idea
4 changes: 2 additions & 2 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 9 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -48,6 +48,15 @@
<category android:name="android.intent.category.BROWSABLE" />
<data android:mimeType="audio/*" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:scheme="neriplayer"
android:host="listen-together"
android:pathPrefix="/join" />
</intent-filter>
</activity>
<activity
android:name=".activity.NeteaseWebLoginActivity"
Expand Down
352 changes: 347 additions & 5 deletions app/src/main/java/moe/ouom/neriplayer/activity/MainActivity.kt

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,10 @@ fun buildBiliPartSong(
album = "${PlayerManager.BILI_SOURCE_TAG}|${page.cid}",
albumId = 0L,
durationMs = page.durationSec * 1000L,
coverUrl = coverUrl
coverUrl = coverUrl,
channelId = "bilibili",
audioId = basicInfo.aid.toString(),
subAudioId = page.cid.toString()
)
}

Expand Down
46 changes: 38 additions & 8 deletions app/src/main/java/moe/ouom/neriplayer/core/di/AppContainer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,14 +43,18 @@ import moe.ouom.neriplayer.core.api.search.QQMusicSearchApi
import moe.ouom.neriplayer.core.api.youtube.YouTubeMusicClient
import moe.ouom.neriplayer.core.api.youtube.YouTubeMusicPlaybackRepository
import moe.ouom.neriplayer.core.download.ManagedDownloadStorage
import moe.ouom.neriplayer.data.ListenTogetherPreferences
import moe.ouom.neriplayer.data.auth.bili.BiliCookieRepository
import moe.ouom.neriplayer.data.auth.netease.NeteaseCookieRepository
import moe.ouom.neriplayer.data.history.PlayHistoryRepository
import moe.ouom.neriplayer.data.playlist.usage.PlaylistUsageRepository
import moe.ouom.neriplayer.data.settings.SettingsRepository
import moe.ouom.neriplayer.data.auth.youtube.YouTubeAuthAutoRefreshManager
import moe.ouom.neriplayer.data.auth.youtube.YouTubeAuthRepository
import moe.ouom.neriplayer.data.auth.youtube.YOUTUBE_MUSIC_ORIGIN
import moe.ouom.neriplayer.data.history.PlayHistoryRepository
import moe.ouom.neriplayer.listentogether.ListenTogetherApi
import moe.ouom.neriplayer.listentogether.ListenTogetherSessionManager
import moe.ouom.neriplayer.listentogether.ListenTogetherWebSocketClient
import moe.ouom.neriplayer.data.settings.SettingsRepository
import moe.ouom.neriplayer.data.playlist.usage.PlaylistUsageRepository
import moe.ouom.neriplayer.data.platform.youtube.buildYouTubeInnertubeRequestHeaders
import moe.ouom.neriplayer.data.platform.youtube.buildYouTubePageRequestHeaders
import moe.ouom.neriplayer.data.platform.youtube.buildYouTubeStreamRequestHeaders
Expand All @@ -68,22 +72,27 @@ internal fun resolveInitialBypassProxy(

internal data class InitialManagedDownloadSettings(
val directoryUri: String? = null,
val directoryLabel: String? = null
val directoryLabel: String? = null,
val fileNameTemplate: String? = null
)

internal fun resolveInitialManagedDownloadSettings(
currentDirectoryUri: String? = null,
currentDirectoryLabel: String? = null,
currentFileNameTemplate: String? = null,
loadDirectoryUri: () -> String?,
loadDirectoryLabel: () -> String?
loadDirectoryLabel: () -> String?,
loadFileNameTemplate: () -> String?
): InitialManagedDownloadSettings {
return InitialManagedDownloadSettings(
directoryUri = runCatching(loadDirectoryUri).getOrDefault(currentDirectoryUri),
directoryLabel = runCatching(loadDirectoryLabel).getOrDefault(currentDirectoryLabel)
directoryLabel = runCatching(loadDirectoryLabel).getOrDefault(currentDirectoryLabel),
fileNameTemplate = runCatching(loadFileNameTemplate).getOrDefault(currentFileNameTemplate)
).let { resolved ->
InitialManagedDownloadSettings(
directoryUri = resolved.directoryUri?.takeIf(String::isNotBlank),
directoryLabel = resolved.directoryLabel?.takeIf(String::isNotBlank)
directoryLabel = resolved.directoryLabel?.takeIf(String::isNotBlank),
fileNameTemplate = resolved.fileNameTemplate?.takeIf(String::isNotBlank)
)
}
}
Expand Down Expand Up @@ -116,6 +125,7 @@ object AppContainer {

// 基础 Repo
val settingsRepo by lazy { SettingsRepository(application) }
val listenTogetherPreferences by lazy { ListenTogetherPreferences(application) }
val neteaseCookieRepo by lazy { NeteaseCookieRepository(application) }
val biliCookieRepo by lazy { BiliCookieRepository(application) }
val youtubeAuthRepo by lazy { YouTubeAuthRepository(application) }
Expand Down Expand Up @@ -225,6 +235,14 @@ object AppContainer {
val cloudMusicSearchApi by lazy { CloudMusicSearchApi(neteaseClient) }
val qqMusicSearchApi by lazy { QQMusicSearchApi() }
val lrcLibClient by lazy { moe.ouom.neriplayer.core.api.lyrics.LrcLibClient(sharedOkHttpClient) }
val listenTogetherApi by lazy { ListenTogetherApi(sharedOkHttpClient) }
val listenTogetherWebSocketClient by lazy { ListenTogetherWebSocketClient(sharedOkHttpClient) }
val listenTogetherSessionManager by lazy {
ListenTogetherSessionManager(
api = listenTogetherApi,
webSocketClient = listenTogetherWebSocketClient
)
}

fun launchBackgroundIo(block: suspend CoroutineScope.() -> Unit) = scope.launch(block = block)

Expand Down Expand Up @@ -260,11 +278,17 @@ object AppContainer {
runBlocking {
settingsRepo.downloadDirectoryLabelFlow.first()
}
},
loadFileNameTemplate = {
runBlocking {
settingsRepo.downloadFileNameTemplateFlow.first()
}
}
)
ManagedDownloadStorage.primeSettings(
directoryUri = initialManagedDownloadSettings.directoryUri,
directoryLabel = initialManagedDownloadSettings.directoryLabel
directoryLabel = initialManagedDownloadSettings.directoryLabel,
fileNameTemplate = initialManagedDownloadSettings.fileNameTemplate
)
}

Expand Down Expand Up @@ -314,6 +338,12 @@ object AppContainer {
ManagedDownloadStorage.updateCustomDirectoryLabel(label)
}
.launchIn(scope)

settingsRepo.downloadFileNameTemplateFlow
.onEach { template ->
ManagedDownloadStorage.updateDownloadFileNameTemplate(template)
}
.launchIn(scope)
}

private fun isYouTubeHost(host: String): Boolean {
Expand Down
Loading
Loading