You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
879 B
31 lines
879 B
package nova.monadic_sfx.util
|
|
|
|
import cats.effect.Resource
|
|
import monix.bio.Task
|
|
import uk.co.caprica.vlcj.factory.MediaPlayerFactory
|
|
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer
|
|
|
|
class MediaPlayerResource(
|
|
val factory: MediaPlayerFactory,
|
|
val controller: EmbeddedMediaPlayer
|
|
)
|
|
|
|
object MediaPlayerResource {
|
|
val mediaPlayerFactoryResource =
|
|
Resource.make(Task(new MediaPlayerFactory()))(factory =>
|
|
Task(factory.release())
|
|
)
|
|
|
|
def mediaPlayerControllerResource(factory: MediaPlayerFactory) =
|
|
Resource.make(Task {
|
|
val players = factory.mediaPlayers()
|
|
players.newEmbeddedMediaPlayer()
|
|
})(controller => Task(controller.release()))
|
|
|
|
def apply() =
|
|
for {
|
|
factory <- mediaPlayerFactoryResource
|
|
controller <- mediaPlayerControllerResource(factory)
|
|
} yield new MediaPlayerResource(factory, controller)
|
|
|
|
}
|