diff --git a/Main.hs b/Main.hs index d8881b8..1752926 100644 --- a/Main.hs +++ b/Main.hs @@ -6,11 +6,12 @@ import System.Directory (doesFileExist) import Network.Google.OAuth2 (formUrl, exchangeCode, refreshTokens, OAuth2Client(..), OAuth2Tokens(..)) import Network.Google (makeRequest, doRequest) -import Network.HTTP.Conduit (simpleHttp) +import Network.HTTP.Conduit (simpleHttp, HttpException) import Data.Aeson import qualified Data.ByteString.Lazy.Char8 as BL import qualified Data.Text as T import qualified Data.Map as M +import Control.Exception data URL = URL { jurl :: T.Text } deriving (Show, Eq) @@ -108,15 +109,22 @@ main = do authcode <- getLine tokens <- exchangeCode client authcode putStrLn $ "Received access token: " ++ show (accessToken tokens) - tokens2 <- refreshTokens client tokens - putStrLn $ "As a test, refreshed token: " ++ show (accessToken tokens2) - writeFile file (show tokens2) + writeFile file (show tokens) accessTok <- fmap (accessToken . read) (readFile file) - findTracks accessTok "Foo+Fighters" - -findTracks accessTok term = do - response <- simpleHttp $ searchRequest term accessTok - return $ getItems response + tracks <- findTracks client accessTok "Foo+Fighters" + print tracks + +getNewTokens :: OAuth2Client -> IO () +getNewTokens client = do + tokens <- read <$> readFile file + newTokens <- refreshTokens client tokens + writeFile file (show newTokens) + +findTracks client accessTok term = do + response <- (try $ simpleHttp $ searchRequest term accessTok) :: IO (Either HttpException BL.ByteString) + case response of + (Left _) -> getNewTokens client >> findTracks client accessTok term + (Right resp) -> return $ getItems resp search :: String -> [T.Text] search term = undefined