-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
16 changed files
with
320 additions
and
91 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
62 changes: 62 additions & 0 deletions
62
composeApp/src/desktopMain/kotlin/player/data/repository/PlayerImpl.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
package player.data.repository | ||
|
||
import player.domain.repository.PlayerRepository | ||
import kotlinx.coroutines.* | ||
import kotlinx.coroutines.flow.Flow | ||
import kotlinx.coroutines.flow.MutableStateFlow | ||
import kotlinx.coroutines.flow.collectLatest | ||
import kotlinx.coroutines.flow.flow | ||
import player.util.PlayerState | ||
import java.io.File | ||
|
||
class PlayerImpl: PlayerRepository { | ||
private var runtime: Runtime = Runtime.getRuntime() | ||
private var playerDir: File? =null | ||
|
||
init { | ||
println("PlayerImpl Created") | ||
} | ||
override fun setPlayerDir(playerEXE: String): Flow<PlayerState<String>> { | ||
return flow<PlayerState<String>> { | ||
|
||
emit(PlayerState.Empty()) | ||
try { | ||
playerDir = File(playerEXE) | ||
emit(PlayerState.Ready(playerEXE)) | ||
}catch (e:Exception){ | ||
emit(PlayerState.Error(e.message.toString())) | ||
} | ||
} | ||
} | ||
|
||
override fun checkPlayerDefaultPath(): Flow<PlayerState<String>> { | ||
val defPath = "C:\\Program Files (x86)\\K-Lite Codec Pack\\MPC-HC64\\mpc-hc64.exe" | ||
|
||
return flow<PlayerState<String>> { | ||
emit(PlayerState.Empty()) | ||
try { | ||
val def = File(defPath) | ||
if (def.exists() && def.isFile){ | ||
playerDir = File(defPath) | ||
emit(PlayerState.Ready(defPath)) | ||
} | ||
} catch (e: Exception) { | ||
println(e.message) | ||
} | ||
} | ||
} | ||
|
||
|
||
override fun play(link: String): Process? { | ||
return runtime.exec("${playerDir?.path} $link") | ||
} | ||
|
||
|
||
|
||
override fun shutdown() { | ||
println("Player.Player Cancelled") | ||
runtime.addShutdownHook(Thread("Cancelled")) | ||
} | ||
|
||
|
||
} |
43 changes: 43 additions & 0 deletions
43
composeApp/src/desktopMain/kotlin/player/di/PlayerModule.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
package player.di | ||
|
||
import org.koin.core.module.dsl.bind | ||
import org.koin.core.module.dsl.createdAtStart | ||
import org.koin.core.module.dsl.singleOf | ||
import org.koin.core.module.dsl.withOptions | ||
import player.data.repository.PlayerImpl | ||
import org.koin.core.qualifier.named | ||
import org.koin.dsl.module | ||
import player.domain.repository.PlayerRepository | ||
import player.presentation.viewmodel.PlayerViewModel | ||
|
||
|
||
val PlayerModule = module(createdAtStart=true) { | ||
|
||
// single<PlayerRepository>(named("playerRepository")) { | ||
// PlayerImpl() | ||
// } | ||
|
||
singleOf(::PlayerImpl) withOptions { | ||
// definition options | ||
named("playerRepository") | ||
bind<PlayerRepository>() | ||
createdAtStart() | ||
} | ||
|
||
|
||
single<PlayerViewModel>{ | ||
PlayerViewModel() | ||
} withOptions { | ||
// definition options | ||
named("playerViewModel") | ||
createdAtStart() | ||
} | ||
|
||
|
||
|
||
|
||
// single<PlayerRepository> { PlayerImpl() as PlayerRepository } withOptions { | ||
// named("playerRepository") | ||
// createdAtStart() | ||
// } | ||
} |
16 changes: 16 additions & 0 deletions
16
composeApp/src/desktopMain/kotlin/player/domain/repository/PlayerRepository.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
package player.domain.repository | ||
|
||
import kotlinx.coroutines.flow.Flow | ||
import player.util.PlayerState | ||
|
||
interface PlayerRepository { | ||
|
||
fun setPlayerDir(playerEXE: String): Flow<PlayerState<String>> | ||
|
||
fun checkPlayerDefaultPath(): Flow<PlayerState<String>> | ||
|
||
fun play(link: String): Process? | ||
|
||
fun shutdown() | ||
|
||
} |
48 changes: 48 additions & 0 deletions
48
composeApp/src/desktopMain/kotlin/player/presentation/compose/SetupPlayer.kt
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package player.presentation.compose | ||
|
||
import androidx.compose.foundation.layout.Arrangement | ||
import androidx.compose.foundation.layout.Column | ||
import androidx.compose.foundation.layout.fillMaxSize | ||
import androidx.compose.material.Button | ||
import androidx.compose.material.Text | ||
import androidx.compose.runtime.Composable | ||
import androidx.compose.runtime.MutableState | ||
import androidx.compose.runtime.mutableStateOf | ||
import androidx.compose.runtime.remember | ||
import androidx.compose.ui.Alignment | ||
import androidx.compose.ui.Modifier | ||
import com.darkrockstudios.libraries.mpfilepicker.FilePicker | ||
import org.koin.java.KoinJavaComponent | ||
import player.domain.repository.PlayerRepository | ||
import player.presentation.viewmodel.PlayerViewModel | ||
import java.io.File | ||
|
||
@Composable | ||
fun SetupPlayer(viewModel: PlayerViewModel = KoinJavaComponent.getKoin().get()){ | ||
|
||
val showPicker = remember { mutableStateOf(false) } | ||
FilePicker( | ||
show = showPicker.value, fileExtensions = listOf("exe"), title = "mpc-hc64" | ||
) { platformFile -> | ||
if (platformFile != null) { | ||
viewModel.setPlayerDir(platformFile.path) | ||
} | ||
showPicker.value = false | ||
} | ||
|
||
Column( | ||
Modifier.fillMaxSize(), | ||
horizontalAlignment = Alignment.CenterHorizontally, | ||
verticalArrangement = Arrangement.Center | ||
) { | ||
|
||
Text("Please Download And Select K-Lite Codec exe") | ||
Button({ | ||
showPicker.value = true | ||
}) { | ||
Text("Select") | ||
} | ||
|
||
} | ||
|
||
} |
Oops, something went wrong.