Загрузка плейлистов.
[mpd-web.git] / system / mpd_class.php
index 8ffddcd45dcf16087766f83b806d2f4a94a9bd8b..38769e38a5297b82e80a3824020e2c8bc6a203b2 100644 (file)
@@ -51,6 +51,7 @@ define("MPD_CMD_PLSWAPTRACK", "swap");
 define("MPD_CMD_PLMOVETRACK", "move");\r
 define("MPD_CMD_PASSWORD",    "password");\r
 define("MPD_CMD_TABLE",       "list");\r
+define("MPD_CMD_LISTS",       "listplaylists");\r
 \r
 // Predefined MPD Response messages\r
 define("MPD_RESPONSE_ERR", "ACK");\r
@@ -417,6 +418,17 @@ class mpd {
                return $resp;\r
        }\r
 \r
+       /* PLList() \r
+        * \r
+        * Retrieves the playlists info. \r
+        */\r
+       function PLList() {\r
+               if ( $this->debugging ) echo "mpd->PLList()\n";\r
+               if ( ! is_null($resp = $this->SendCommand(MPD_CMD_LISTS))) $this->RefreshInfo();\r
+               if ( $this->debugging ) echo "mpd->PLList() / return\n";\r
+               return $resp;\r
+       }\r
+\r
        /* PLSave() \r
         * \r
         * Saves the playlist to <file>.m3u for later retrieval. The file is saved in the MPD playlist\r
@@ -814,6 +826,35 @@ class mpd {
                return $plistArray;\r
        }\r
 \r
+       /* _parsePlayListsResponse() \r
+        * \r
+        * Builds a multidimensional array with MPD response lists.\r
+     *\r
+        * NOTE: This function is used internally within the class. It should not be used.\r
+        */\r
+       function _parsePlayListsResponse($resp) {\r
+               if ( is_null($resp) ) {\r
+                       return NULL;\r
+               } else {\r
+                       $plistArray = array();\r
+                       $plistLine = strtok($resp,"\n");\r
+                       $plistFile = "";\r
+                       $plCounter = -1;\r
+                       while ( $plistLine ) {\r
+                               list ( $element, $value ) = explode(": ",$plistLine);\r
+                               if($element == "playlist") {\r
+                                 $plCounter++;\r
+                                 $plistArray[$plCounter]['name']=$value;\r
+                               }\r
+                               if($element == "Last-Modified") {\r
+                                 $plistArray[$plCounter]['timestamp']=$value;\r
+                               }\r
+                               $plistLine = strtok("\n");\r
+                       } \r
+               }\r
+               return $plistArray;\r
+       }\r
+\r
        /* RefreshInfo() \r
         * \r
         * Updates all class properties with the values from the MPD server.\r
@@ -849,10 +890,14 @@ class mpd {
                        }\r
                }\r
 \r
+       // Get list of lists\r
+               $plStr = $this->SendCommand(MPD_CMD_LISTS);\r
+               $this->playlists = $this->_parsePlayListsResponse($plStr);\r
+\r
         // Get the Playlist\r
                $plStr = $this->SendCommand(MPD_CMD_PLLIST);\r
                $this->playlist = $this->_parseFileListResponse($plStr);\r
-       $this->playlist_count = count($this->playlist);\r
+               $this->playlist_count = count($this->playlist);\r
 \r
         // Set Misc Other Variables\r
                $this->state = $status['state'];\r