change filelocation, edit readme

This commit is contained in:
qvalentin 2021-06-27 11:36:46 +02:00
parent 63a1d64293
commit 74fa5cb880
3 changed files with 62 additions and 44 deletions

View File

@ -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).
Run it with:
`websocketd --port=8974 wnpClient` `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`.

View File

@ -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

View File

@ -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