change filelocation, edit readme
This commit is contained in:
parent
63a1d64293
commit
74fa5cb880
13
README.md
13
README.md
|
@ -5,4 +5,15 @@ Alternative client for the [WebNowPlaying-BrowserExtension](https://github.com/t
|
||||||
|
|
||||||
Requires [websocketd](https://github.com/joewalnes/websocketd).
|
Requires [websocketd](https://github.com/joewalnes/websocketd).
|
||||||
|
|
||||||
`websocketd --port=8974 wnpClient`
|
Run it with:
|
||||||
|
`websocketd --port=8974 wnpClient`
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The information is stored in a text file: `~/.wnpClient/wnpClient.txt`.
|
||||||
|
|
||||||
|
From there you can read it with whatever application you want to use.
|
||||||
|
For example with [Executor](https://extensions.gnome.org/extension/2932/executor/) for the gnome desktop environment.
|
||||||
|
`head ~/.wnpClient/wnpClient.txt -n 2 | sed ':a;N;$!ba;s/\n/ by /g'`
|
||||||
|
|
||||||
|
The cover of the current song is also downloaded to `~/.wnpClient/cover.jpg`.
|
92
app/Main.hs
92
app/Main.hs
|
@ -1,61 +1,67 @@
|
||||||
module Main where
|
module Main where
|
||||||
|
|
||||||
import Control.Monad
|
|
||||||
import Control.Exception
|
import Control.Exception
|
||||||
import System.IO
|
import Control.Monad
|
||||||
import System.Directory
|
|
||||||
import Network.HTTP.Client
|
|
||||||
import Network.HTTP.Simple
|
|
||||||
import Network.URI
|
|
||||||
import qualified Data.ByteString.Char8 as B8
|
import qualified Data.ByteString.Char8 as B8
|
||||||
import GHC.IO.Encoding (setLocaleEncoding)
|
import GHC.IO.Encoding (setLocaleEncoding)
|
||||||
import Lib
|
import Lib
|
||||||
|
import Network.HTTP.Client
|
||||||
|
import Network.HTTP.Simple
|
||||||
|
import Network.URI
|
||||||
|
import System.Directory
|
||||||
|
import System.FilePath
|
||||||
|
import System.IO
|
||||||
|
|
||||||
main :: IO ()
|
main :: IO ()
|
||||||
main = do
|
main = do
|
||||||
setLocaleEncoding utf8
|
setLocaleEncoding utf8
|
||||||
forever $ do
|
createDirectoryIfMissing False =<< workingDir
|
||||||
line <- getLine
|
join $ (writeFile <$> fileName) <*> pure ""
|
||||||
dispatch line
|
forever $ do
|
||||||
|
line <- getLine
|
||||||
|
dispatch line
|
||||||
|
|
||||||
dispatch :: String -> IO ()
|
dispatch :: String -> IO ()
|
||||||
dispatch ('T':'I':'T':'L':'E':':':title) = writeToFile title 0
|
dispatch ('T' : 'I' : 'T' : 'L' : 'E' : ':' : title) = writeToFile title 0
|
||||||
dispatch ('A':'R':'T':'I':'S':'T':':':artist) = writeToFile artist 1
|
dispatch ('A' : 'R' : 'T' : 'I' : 'S' : 'T' : ':' : artist) = writeToFile artist 1
|
||||||
dispatch ('A':'L':'B':'U':'M':':':album) = writeToFile album 2
|
dispatch ('A' : 'L' : 'B' : 'U' : 'M' : ':' : album) = writeToFile album 2
|
||||||
dispatch ('C':'O':'V':'E':'R':':':cover) = handleCover cover
|
dispatch ('C' : 'O' : 'V' : 'E' : 'R' : ':' : cover) = handleCover cover
|
||||||
dispatch _ = return ()
|
dispatch _ = return ()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
writeToFile:: String -> Int -> IO()
|
|
||||||
writeToFile text position= do
|
|
||||||
contents <- lines <$> readFile filename
|
|
||||||
let newContent = unlines $ take position contents ++ [text] ++ drop (position+1) contents
|
|
||||||
bracketOnError (openTempFile "." "temp")
|
|
||||||
(\(tempName,tempHandle) -> do
|
|
||||||
hClose tempHandle
|
|
||||||
removeFile tempName)
|
|
||||||
(\(tempName,tempHandle) -> do
|
|
||||||
hPutStr tempHandle newContent
|
|
||||||
hClose tempHandle
|
|
||||||
renameFile tempName filename)
|
|
||||||
|
|
||||||
|
writeToFile :: String -> Int -> IO ()
|
||||||
|
writeToFile text position = do
|
||||||
|
contents <- lines <$> (readFile =<< fileName)
|
||||||
|
let newContent = unlines $ take position contents ++ [text] ++ drop (position + 1) contents
|
||||||
|
bracketOnError
|
||||||
|
(openTempFile "." "temp")
|
||||||
|
( \(tempName, tempHandle) -> do
|
||||||
|
hClose tempHandle
|
||||||
|
removeFile tempName
|
||||||
|
)
|
||||||
|
( \(tempName, tempHandle) -> do
|
||||||
|
hPutStr tempHandle newContent
|
||||||
|
hClose tempHandle
|
||||||
|
renameFile tempName =<< fileName
|
||||||
|
)
|
||||||
|
|
||||||
handleCover :: String -> IO ()
|
handleCover :: String -> IO ()
|
||||||
handleCover url= do
|
handleCover url = do
|
||||||
contents <- lines <$> readFile filename
|
contents <- lines <$> (readFile =<< fileName)
|
||||||
when ((contents !! 3 ) /= url && url /= "") $ do
|
if length contents > 3 && (contents !! 3) /= url && url /= ""
|
||||||
writeToFile (url) 3
|
then do
|
||||||
request <- parseRequest url
|
writeToFile url 3
|
||||||
let fileName = Prelude.last . pathSegments . getUri $ request
|
request <- parseRequest url
|
||||||
resp <- httpBS request
|
let coverFileName = Prelude.last . pathSegments . getUri $ request
|
||||||
B8.writeFile coverName $ getResponseBody resp
|
join $ B8.writeFile <$> coverName <*> (getResponseBody <$> httpBS request)
|
||||||
|
else writeToFile url 3
|
||||||
|
|
||||||
|
-- B8.writeFile coverName $ getResponseBody resp
|
||||||
|
|
||||||
filename :: FilePath
|
fileName :: IO FilePath
|
||||||
filename= "wnpClient.txt"
|
fileName = (</> "wnpClient.txt") <$> workingDir
|
||||||
|
|
||||||
|
coverName :: IO FilePath
|
||||||
|
coverName = (</> "cover.jpg") <$> workingDir
|
||||||
|
|
||||||
coverName :: FilePath
|
workingDir :: IO FilePath
|
||||||
coverName="cover.jpg"
|
workingDir = (</> ".wnpClient") <$> getHomeDirectory
|
|
@ -51,6 +51,7 @@ executable wnpClient
|
||||||
, network-uri
|
, network-uri
|
||||||
, http-conduit
|
, http-conduit
|
||||||
, bytestring
|
, bytestring
|
||||||
|
, filepath
|
||||||
default-language: Haskell2010
|
default-language: Haskell2010
|
||||||
|
|
||||||
test-suite wnpClient-test
|
test-suite wnpClient-test
|
||||||
|
|
Loading…
Reference in New Issue