libmpd 0.9.0.10 → 0.9.1.0
raw patch · 5 files changed
+30/−8 lines, 5 files
Files
- changelog.md +5/−1
- libmpd.cabal +1/−1
- src/Network/MPD/Applicative/Status.hs +2/−1
- src/Network/MPD/Commands/Types.hs +9/−3
- src/Network/MPD/Core.hs +13/−2
changelog.md view
@@ -1,4 +1,8 @@-* v0.9.10+* v0.9.1.0+ - Support partition in Network.MPD.Status+ - Ignore unknown key-value pairs in Network.MPD.status so that it breaks much less often.++* v0.9.0.10 - Port it for newer network library * v0.9.0, 2014-09-21
libmpd.cabal view
@@ -1,5 +1,5 @@ Name: libmpd-Version: 0.9.0.10+Version: 0.9.1.0 Synopsis: An MPD client library. Description: A client library for MPD, the Music Player Daemon. Category: Network, Sound
src/Network/MPD/Applicative/Status.hs view
@@ -104,7 +104,8 @@ "audio" -> audio $ \x -> a { stAudio = x } "updating_db" -> num $ \x -> a { stUpdatingDb = Just x } "error" -> Right a { stError = Just (UTF8.toString v) }- _ -> unexpectedPair+ "partition" -> Right a { stPartition = UTF8.toString v }+ _ -> Right a where unexpectedPair = Left ("unexpected key-value pair: " ++ show p) int f = maybe unexpectedPair (Right . f) (parseNum v :: Maybe Int)
src/Network/MPD/Commands/Types.hs view
@@ -303,8 +303,11 @@ -- @current - new = 0 if current - new < 0@ -- -- but @current / 0@ still yields a division by zero exception.-newtype Volume = Volume Int deriving (Eq, Ord, Show)+newtype Volume = Volume Int deriving (Eq, Ord) +instance Show Volume where+ showsPrec p (Volume v) = showsPrec p v+ instance Enum Volume where toEnum = Volume . min 100 . max 0 fromEnum (Volume x) = x@@ -377,7 +380,9 @@ -- | If True, a song will be removed after it has been played. , stConsume :: Bool -- | Last error message (if any).- , stError :: Maybe String }+ , stError :: Maybe String+ -- | The name of MPD partition.+ , stPartition :: String } deriving (Eq, Show) defaultStatus :: Status@@ -388,7 +393,8 @@ , stNextSongPos = Nothing, stNextSongID = Nothing , stBitrate = Nothing, stXFadeWidth = 0, stMixRampdB = 0 , stMixRampDelay = 0, stAudio = (0,0,0), stUpdatingDb = Nothing- , stSingle = False, stConsume = False, stError = Nothing }+ , stSingle = False, stConsume = False, stError = Nothing+ , stPartition = "" } instance Default Status where def = defaultStatus
src/Network/MPD/Core.hs view
@@ -36,7 +36,9 @@ import qualified Data.Foldable as F import System.IO (IOMode(..)) import Network.Socket- ( SockAddr(..)+ ( Family(..)+ , SockAddr(..)+ , SocketType(..) , addrAddress , addrFamily , addrProtocol@@ -119,12 +121,21 @@ mpdOpen = MPD $ do (host, port) <- ask runMPD close- addr:_ <- liftIO $ getAddrInfo (Just defaultHints) (Just host) (Just $ show port)+ addr:_ <- liftIO $ getAddr host port sock <- liftIO $ socket (addrFamily addr) (addrSocketType addr) (addrProtocol addr) mHandle <- liftIO (safeConnectTo (sock,(addrAddress addr))) modify (\st -> st { stHandle = mHandle }) F.forM_ mHandle $ \_ -> runMPD checkConn >>= (`unless` runMPD close) where+ getAddr addr@('/':_) _ = return [+ defaultHints { addrFamily = AF_UNIX+ , addrSocketType = Stream+ , addrAddress = SockAddrUnix addr+ }+ ]++ getAddr host port = getAddrInfo (Just defaultHints) (Just host) (Just $ show port)+ safeConnectTo (sock,addr) = (connect sock addr) >> (Just <$> socketToHandle sock ReadWriteMode) `catchAny` const (return Nothing)