module Main where import Control.Monad.IO.Class import Control.Monad.Trans.Cont import Data.IORef import System.Directory (getHomeDirectory, createDirectoryIfMissing) import FM.FM import qualified FM.NetEase as NetEase import qualified UI.Black as Black import qualified UI.Login as Login import qualified UI.Menu as Menu import qualified UI.Player as Player import Types getCache :: IO FilePath getCache = do root <- (++ "/.fm") <$> getHomeDirectory createDirectoryIfMissing True root let cache = root ++ "/cache" createDirectoryIfMissing True cache return cache main :: IO () main = do netEaseSession <- newIORef Nothing cache <- initCache =<< getCache evalContT $ do source <- Menu.menuSelection [ NetEaseFM, NetEaseDailyRecommendation, NetEasePlayLists, LocalCache ] Nothing "播放源" session <- Login.login source netEaseSession cache case source of NetEasePlayLists -> do playLists <- liftIO $ Black.black Nothing (runSession session NetEase.fetchPlayLists) return source <- Menu.menuSelection [ NetEasePlayList id title | (id, title) <- playLists ] Nothing (show1 NetEasePlayLists) Player.musicPlayer source session cache _ -> Player.musicPlayer source session cache Black.black (Just "缓存队列中有任务,缓存完毕后自动退出。") (waitAllCacheTasks cache) return