Sophie

Sophie

distrib > Fedora > 18 > i386 > by-pkgid > 42d3382f0dd502c3dc78dfd0b42d107d > files > 101

ghc-libmpd-devel-0.8.0.2-1.fc18.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>Network/MPD.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE CPP #-}</span>
<a name="line-2"></a><span class='hs-comment'>-- | Module    : Network.MPD</span>
<a name="line-3"></a><span class='hs-comment'>-- Copyright   : (c) Ben Sinclair 2005-2009, Joachim Fasting 2010</span>
<a name="line-4"></a><span class='hs-comment'>-- License     : LGPL (see LICENSE)</span>
<a name="line-5"></a><span class='hs-comment'>-- Maintainer  : Joachim Fasting &lt;joachim.fasting@gmail.com&gt;</span>
<a name="line-6"></a><span class='hs-comment'>-- Stability   : alpha</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- An MPD client library. MPD is a daemon for playing music that is</span>
<a name="line-9"></a><span class='hs-comment'>-- controlled over a network socket. Its site is at &lt;<a href="http://www.musicpd.org/">http://www.musicpd.org/</a>&gt;.</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- To use the library, do:</span>
<a name="line-12"></a><span class='hs-comment'>-- </span>
<a name="line-13"></a><span class='hs-comment'>-- &gt; {-# LANGUAGE OverloadedStrings #-}</span>
<a name="line-14"></a><span class='hs-comment'>-- &gt; import qualified Network.MPD as MPD</span>
<a name="line-15"></a>
<a name="line-16"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>MPD</span> <span class='hs-layout'>(</span>
<a name="line-17"></a>    <span class='hs-comment'>-- * Basic data types</span>
<a name="line-18"></a>    <span class='hs-conid'>MonadMPD</span><span class='hs-layout'>,</span> <span class='hs-conid'>MPD</span><span class='hs-layout'>,</span> <span class='hs-conid'>MPDError</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>ACKType</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span> <span class='hs-conid'>Response</span><span class='hs-layout'>,</span>
<a name="line-19"></a>    <span class='hs-conid'>Host</span><span class='hs-layout'>,</span> <span class='hs-conid'>Port</span><span class='hs-layout'>,</span> <span class='hs-conid'>Password</span><span class='hs-layout'>,</span>
<a name="line-20"></a>    <span class='hs-comment'>-- * Connections</span>
<a name="line-21"></a>    <span class='hs-varid'>withMPD</span><span class='hs-layout'>,</span> <span class='hs-varid'>withMPD_</span><span class='hs-layout'>,</span> <span class='hs-varid'>withMPDEx</span><span class='hs-layout'>,</span>
<a name="line-22"></a>    <span class='hs-keyword'>module</span> <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>MPD</span><span class='hs-varop'>.</span><span class='hs-conid'>Commands</span><span class='hs-layout'>,</span>
<a name="line-23"></a><span class='hs-cpp'>#ifdef TEST</span>
<a name="line-24"></a>    <span class='hs-varid'>getConnectionSettings</span><span class='hs-layout'>,</span> <span class='hs-varid'>getEnvDefault</span>
<a name="line-25"></a><span class='hs-cpp'>#endif</span>
<a name="line-26"></a>    <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-27"></a>
<a name="line-28"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>Prelude</span>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Control</span><span class='hs-varop'>.</span><span class='hs-conid'>Exception</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>E</span>
<a name="line-30"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>MPD</span><span class='hs-varop'>.</span><span class='hs-conid'>Commands</span>
<a name="line-31"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>Network</span><span class='hs-varop'>.</span><span class='hs-conid'>MPD</span><span class='hs-varop'>.</span><span class='hs-conid'>Core</span>
<a name="line-32"></a>
<a name="line-33"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>Environment</span> <span class='hs-layout'>(</span><span class='hs-varid'>getEnv</span><span class='hs-layout'>)</span>
<a name="line-34"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>System</span><span class='hs-varop'>.</span><span class='hs-conid'>IO</span><span class='hs-varop'>.</span><span class='hs-conid'>Error</span> <span class='hs-layout'>(</span><span class='hs-varid'>isDoesNotExistError</span><span class='hs-layout'>)</span>
<a name="line-35"></a><span class='hs-keyword'>import</span>           <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>listToMaybe</span><span class='hs-layout'>)</span>
<a name="line-36"></a>
<a name="line-37"></a><a name="withMPD"></a><span class='hs-comment'>-- | A wrapper for 'withMPDEx' that uses localhost:6600 as the default</span>
<a name="line-38"></a><span class='hs-comment'>-- host:port, or whatever is found in the environment variables MPD_HOST and</span>
<a name="line-39"></a><span class='hs-comment'>-- MPD_PORT. If MPD_HOST is of the form \"password\@host\" the password</span>
<a name="line-40"></a><span class='hs-comment'>-- will be supplied as well.</span>
<a name="line-41"></a><span class='hs-comment'>--</span>
<a name="line-42"></a><span class='hs-comment'>-- Examples:</span>
<a name="line-43"></a><span class='hs-comment'>--</span>
<a name="line-44"></a><span class='hs-comment'>-- &gt; withMPD $ play Nothing</span>
<a name="line-45"></a><span class='hs-comment'>-- &gt; withMPD $ add_ "tool" &gt;&gt; play Nothing &gt;&gt; currentSong</span>
<a name="line-46"></a><span class='hs-definition'>withMPD</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>MPD</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Response</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-47"></a><span class='hs-definition'>withMPD</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>withMPD_</span> <span class='hs-conid'>Nothing</span> <span class='hs-conid'>Nothing</span>
<a name="line-48"></a>
<a name="line-49"></a><a name="withMPD_"></a><span class='hs-comment'>-- | Same as `withMPD`, but takes optional arguments that override MPD_HOST and</span>
<a name="line-50"></a><span class='hs-comment'>-- MPD_PORT.</span>
<a name="line-51"></a><span class='hs-comment'>--</span>
<a name="line-52"></a><span class='hs-comment'>-- This is e.g. useful for clients that optionally take @--port@ and @--host@</span>
<a name="line-53"></a><span class='hs-comment'>-- as command line arguments, and fall back to `withMPD`'s defaults if those</span>
<a name="line-54"></a><span class='hs-comment'>-- arguments are not given.</span>
<a name="line-55"></a><span class='hs-definition'>withMPD_</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ optional override for MPD_HOST</span>
<a name="line-56"></a>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span> <span class='hs-comment'>-- ^ optional override for MPD_PORT</span>
<a name="line-57"></a>         <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>MPD</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Response</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span>
<a name="line-58"></a><span class='hs-definition'>withMPD_</span> <span class='hs-varid'>mHost</span> <span class='hs-varid'>mPort</span> <span class='hs-varid'>action</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-59"></a>    <span class='hs-varid'>settings</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>getConnectionSettings</span> <span class='hs-varid'>mHost</span> <span class='hs-varid'>mPort</span>
<a name="line-60"></a>    <span class='hs-keyword'>case</span> <span class='hs-varid'>settings</span> <span class='hs-keyword'>of</span>
<a name="line-61"></a>      <span class='hs-conid'>Right</span> <span class='hs-layout'>(</span><span class='hs-varid'>host</span><span class='hs-layout'>,</span> <span class='hs-varid'>port</span><span class='hs-layout'>,</span> <span class='hs-varid'>pw</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>withMPDEx</span> <span class='hs-varid'>host</span> <span class='hs-varid'>port</span> <span class='hs-varid'>pw</span> <span class='hs-varid'>action</span>
<a name="line-62"></a>      <span class='hs-conid'>Left</span> <span class='hs-varid'>err</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Custom</span><span class='hs-layout'>)</span> <span class='hs-varid'>err</span>
<a name="line-63"></a>
<a name="line-64"></a><a name="getConnectionSettings"></a><span class='hs-definition'>getConnectionSettings</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-layout'>(</span><span class='hs-conid'>Either</span> <span class='hs-conid'>String</span> <span class='hs-layout'>(</span><span class='hs-conid'>Host</span><span class='hs-layout'>,</span> <span class='hs-conid'>Port</span><span class='hs-layout'>,</span> <span class='hs-conid'>Password</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-65"></a><span class='hs-definition'>getConnectionSettings</span> <span class='hs-varid'>mHost</span> <span class='hs-varid'>mPort</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-66"></a>    <span class='hs-layout'>(</span><span class='hs-varid'>host</span><span class='hs-layout'>,</span> <span class='hs-varid'>pw</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>parseHost</span> <span class='hs-varop'>`fmap`</span>
<a name="line-67"></a>        <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>getEnvDefault</span> <span class='hs-str'>"MPD_HOST"</span> <span class='hs-str'>"localhost"</span><span class='hs-layout'>)</span> <span class='hs-varid'>return</span> <span class='hs-varid'>mHost</span>
<a name="line-68"></a>    <span class='hs-varid'>port</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>maybe</span> <span class='hs-layout'>(</span><span class='hs-varid'>getEnvDefault</span> <span class='hs-str'>"MPD_PORT"</span> <span class='hs-str'>"6600"</span><span class='hs-layout'>)</span> <span class='hs-varid'>return</span> <span class='hs-varid'>mPort</span>
<a name="line-69"></a>    <span class='hs-keyword'>case</span> <span class='hs-varid'>maybeRead</span> <span class='hs-varid'>port</span> <span class='hs-keyword'>of</span>
<a name="line-70"></a>      <span class='hs-conid'>Just</span> <span class='hs-varid'>p</span>  <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Right</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>host</span><span class='hs-layout'>,</span> <span class='hs-varid'>p</span><span class='hs-layout'>,</span> <span class='hs-varid'>pw</span><span class='hs-layout'>)</span>
<a name="line-71"></a>      <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-varop'>.</span> <span class='hs-conid'>Left</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-varid'>show</span> <span class='hs-varid'>port</span> <span class='hs-varop'>++</span> <span class='hs-str'>" is not a valid port!"</span><span class='hs-layout'>)</span>
<a name="line-72"></a>    <span class='hs-keyword'>where</span>
<a name="line-73"></a>        <span class='hs-varid'>parseHost</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>breakChar</span> <span class='hs-chr'>'@'</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-74"></a>                          <span class='hs-layout'>(</span><span class='hs-varid'>host</span><span class='hs-layout'>,</span> <span class='hs-str'>""</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>host</span><span class='hs-layout'>,</span> <span class='hs-str'>""</span><span class='hs-layout'>)</span>
<a name="line-75"></a>                          <span class='hs-layout'>(</span><span class='hs-varid'>pw</span><span class='hs-layout'>,</span> <span class='hs-varid'>host</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>host</span><span class='hs-layout'>,</span> <span class='hs-varid'>pw</span><span class='hs-layout'>)</span>
<a name="line-76"></a>
<a name="line-77"></a><a name="getEnvDefault"></a><span class='hs-definition'>getEnvDefault</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>IO</span> <span class='hs-conid'>String</span>
<a name="line-78"></a><span class='hs-definition'>getEnvDefault</span> <span class='hs-varid'>x</span> <span class='hs-varid'>dflt</span> <span class='hs-keyglyph'>=</span>
<a name="line-79"></a>    <span class='hs-conid'>E</span><span class='hs-varop'>.</span><span class='hs-varid'>catch</span> <span class='hs-layout'>(</span><span class='hs-varid'>getEnv</span> <span class='hs-varid'>x</span><span class='hs-layout'>)</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>e</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>if</span> <span class='hs-varid'>isDoesNotExistError</span> <span class='hs-varid'>e</span>
<a name="line-80"></a>                            <span class='hs-keyword'>then</span> <span class='hs-varid'>return</span> <span class='hs-varid'>dflt</span> <span class='hs-keyword'>else</span> <span class='hs-varid'>ioError</span> <span class='hs-varid'>e</span><span class='hs-layout'>)</span>
<a name="line-81"></a>
<a name="line-82"></a><a name="breakChar"></a><span class='hs-comment'>-- Break a string by character, removing the separator.</span>
<a name="line-83"></a><span class='hs-definition'>breakChar</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Char</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-conid'>String</span><span class='hs-layout'>,</span> <span class='hs-conid'>String</span><span class='hs-layout'>)</span>
<a name="line-84"></a><span class='hs-definition'>breakChar</span> <span class='hs-varid'>c</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>let</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>break</span> <span class='hs-layout'>(</span><span class='hs-varop'>==</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>in</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>drop</span> <span class='hs-num'>1</span> <span class='hs-varid'>y</span><span class='hs-layout'>)</span>
<a name="line-85"></a>
<a name="line-86"></a><a name="maybeRead"></a><span class='hs-definition'>maybeRead</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Read</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-conid'>String</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Maybe</span> <span class='hs-varid'>a</span>
<a name="line-87"></a><span class='hs-definition'>maybeRead</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>fmap</span> <span class='hs-varid'>fst</span> <span class='hs-varop'>.</span> <span class='hs-varid'>listToMaybe</span> <span class='hs-varop'>.</span> <span class='hs-varid'>reads</span>
</pre></body>
</html>