change filelocation, edit readme
This commit is contained in:
		
							parent
							
								
									63a1d64293
								
							
						
					
					
						commit
						74fa5cb880
					
				
					 3 changed files with 62 additions and 44 deletions
				
			
		
							
								
								
									
										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…
	
	Add table
		Add a link
		
	
		Reference in a new issue