Main.hs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. {-# LANGUAGE OverloadedStrings #-}
  2. module Main where
  3. import Lib
  4. import Web.Scotty
  5. import qualified Text.Blaze.Html5 as BlazeHtml
  6. import qualified Text.Blaze.Html5.Attributes as BlazeAttributes
  7. import qualified Text.Blaze.Html.Renderer.Text as BlazeRenderer
  8. import Network.Wai.Middleware.RequestLogger -- Logging
  9. import Data.Monoid (mconcat)
  10. import System.Random(randomIO)
  11. import System.Process
  12. import System.IO
  13. import Control.Concurrent(threadDelay)
  14. import Network.Socket(connect, close, SocketType(Stream), socket)
  15. import Network.Socket.Internal(Family(AF_UNIX), SockAddr(SockAddrUnix))
  16. import Network.Socket.ByteString(send, recv)
  17. import Data.ByteString(breakSubstring)
  18. main :: IO ()
  19. main = do
  20. num <- (randomIO :: IO Integer)
  21. let socket = "/tmp/mpvsocket" ++ (show num)
  22. in do
  23. putStrLn ("MPV listening at " ++ socket)
  24. (_, _, _, p) <- createProcess (proc "mpv" ["--input-ipc-server=" ++ socket, "/home/josh/'IS THAT A MAN RIDING A SHRIMP'-9p_QW_HsKPI.mp3"]){ std_in = NoStream, std_out = NoStream, std_err = NoStream}
  25. threadDelay 2000000
  26. togglePause socket
  27. threadDelay 2000000
  28. togglePause socket
  29. waitForProcess p
  30. return ()
  31. togglePause :: String -> IO ()
  32. togglePause ipcloc = do
  33. soc <- socket AF_UNIX Stream 0
  34. connect soc (SockAddrUnix ipcloc)
  35. send soc "{ \"command\": [\"get_property\", \"pause\"] }\n"
  36. received <- recv soc 4096
  37. putStrLn ("Recieved from MPV: " ++ (show received))
  38. send soc $
  39. case snd $ breakSubstring "true" received of
  40. "" -> "{ \"command\": [\"set_property\", \"pause\", true] }\n"
  41. otherwise -> "{ \"command\": [\"set_property\", \"pause\", false] }\n"
  42. close soc
  43. oldmain :: IO ()
  44. oldmain = scotty 3000 $ do
  45. middleware logStdoutDev -- Logging
  46. get "/say/:word" $ do
  47. beam <- param "word"
  48. if beam == "" then
  49. html "<h1>Go to a URI, such as http://URL/say/beam.</h1>"
  50. else
  51. html $ mconcat ["<h1>Scotty, ", beam, " me up!</h1>"]
  52. get "/hello" $ do -- Access this with /hello?name=yee
  53. name <- param "name"
  54. text name
  55. get "/agent" $ do
  56. agent <- header "User-Agent"
  57. text $ maybe "Couldn't determine user agent." id agent
  58. get "/" $ do
  59. html . BlazeRenderer.renderHtml $ do
  60. BlazeHtml.h1 "This is blaze!"