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) }